deviseによるユーザー認証機能の実装で役立った記事をまとめます。
目次
1.deviseの導入
2.deviseでの登録時に独自入力フォームを追加する
3.登録完了時にウェルカムメールを送信する
4.管理ユーザーを設定する
5.日本語化する
6.facebook認証
7.twitter認証
1.deviseの導入
Devise で認証機能を追加
記事通りに進めればオーケー。
“"Rails のサーバーが起動している事を確認したら、http://localhost:3000/users/sign_up をブラウザで開いてユーザーを作成してください。”"
の部分は再起動しないとエラー表示が出ることに注意。
2.deviseでの登録時に独自入力フォームを追加する
Rails4 Devise でサインアップ用のユーザー登録フォームに、独自の入力フィールドを追加する
ーサインアップ時に独自のフィールドを追加出来る。
ー基本的にこれで出来る
ただし、
app/views/users/regsitrations/new.html.erb
の部分は
app/views/devise/regsitrations/new.html.erb
だった(あと、viewの中身がちょっと違う)
3.登録完了時にウェルカムメールを送信する
Deviseでユーザー登録完了時にウェルカムメールを送信する
ーサインアップ時のメールの送信
注意点
ーrails cの後は
UserMailer.registration_confirmation.deliverではなくて
UserMailer.registration_confirmation.deliver_nowを打つ。
ー2段階認証プロセスに登録している場合は、アプリケーション固有のパスワードが必要になるが、登録してなければ気にする必要はない。
ただし、今回は2段階認証プロセスに登録していないのにauthエラー。ここで、「安全性の低いアプリを許可」で対応。
https://www.google.com/settings/security/lesssecureapps
ーconfig.action_mailer.raise_delivery_errors = true
ここをfalseとしてエラーメッセージがでなくて困ったので注意。
ーメーラーからGmailへの接続時に認証(パスワード)のエラーが生じる場合の対処方法
RailsのActionMailerでメールを送信する(Gmail経由)
ーメール送信についてわかりやすくまとまっている
4.管理ユーザーを設定する
RailsとDeviseで管理者ユーザーを作ることに成功した
ー仕様:usersテーブルの中にadmin booleanを設定して、adminを判定。
user登録時にadminの設定がされているユーザがいなければ、adminへのチェックボックスが表示。既にアドミンが設定されていればチェックボックスは非表示。(つまり、最初のユーザだけadminになれる)
config.scoped_views = trueについて
http://d.hatena.ne.jp/gen0_0/20110125/1295987729
通常ユーザと管理人用ユーザのログイン画面を分けたいときに追記する。
5.日本語化する
railsの日本語化 deviseの日本語化
ーこれでdeviseも含め、日本語化出来る。
6.facebook認証
以下の記事でひと通り出来る。
Devise+OmniAuthでユーザ認証を実装する手順
以下、ひと通り記事通りにやってfacebookログインを試みたあとのエラー対応。
★missing required keys: [:provider]というエラー。
routes.rbのdeviceに
:omniauth_providers => [:facebook]
を追加した。
これでもうまく反映されなかったが、rails sをかけたらうまくいったので注意。
参考
deviseでomni-authと組み合わせてたら「missing required keys: [:provider]」
★なぜかログインボタンを押してもログイン出来ない(ユーザ登録出来ていない)。
原因:メールアドレスでのユーザ登録時に付けたバリデーションが悪さしてた。
User.createの部分を
User.newとUser.save(:validate => false)で対応。
参考
Devise + omniauthでfacebookでログインする機能を実装でハマったところを説明
7.twitter認証
facebook認証と同様に以下の記事でひと通り出来る。
Devise+OmniAuthでユーザ認証を実装する手順
以下、twitterログイン関連のエラー
★アプリの登録が出来ない(URLでエラーが出る)
Twitter Developer画面でwebサイトの設定を
http://localhost:3000
に設定するとエラーで登録出来ないが、
http://127.0.0.1:3000
に設定すると登録出来た。
★facebookログインのときと同様にmissing required keys: [:provider]というエラー。
以下のように、facebook同様の処理をする
routes.rbのdeviceに
:omniauth_providers => [:twitter]
を追加した。
これでもうまく反映されなかったが、rails sをかけたらうまくいったので注意。