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でユーザー登録完了時にウェルカムメールを送信する]
(http://easyramble.com/welcome-mail-with-devise.html)
ーサインアップ時のメールの送信
注意点
ー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への接続時に認証(パスワード)のエラーが生じる場合の対処方法]
(http://www.atmarkit.co.jp/ait/articles/1409/03/news109.html)
[RailsのActionMailerでメールを送信する(Gmail経由)]
(http://qiita.com/ytr_i/items/0907ee3312ed9d79c9e8)
ーメール送信についてわかりやすくまとまっている
##4.管理ユーザーを設定する
[RailsとDeviseで管理者ユーザーを作ることに成功した]
(http://blog.panicblanket.com/archives/2054)
ー仕様: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でユーザ認証を実装する手順]
(http://qiita.com/kami30k/items/94aec2d94a2b4e9a1d0b)
以下、ひと通り記事通りにやってfacebookログインを試みたあとのエラー対応。
★missing required keys: [:provider]というエラー。
routes.rbのdeviceに
:omniauth_providers => [:facebook]
を追加した。
これでもうまく反映されなかったが、rails sをかけたらうまくいったので注意。
参考
[deviseでomni-authと組み合わせてたら「missing required keys: [:provider]」]
(http://qiita.com/ms2sato/items/0854de777dc27ca6f0b3)
★なぜかログインボタンを押してもログイン出来ない(ユーザ登録出来ていない)。
原因:メールアドレスでのユーザ登録時に付けたバリデーションが悪さしてた。
User.createの部分を
User.newとUser.save(:validate => false)で対応。
参考
[Devise + omniauthでfacebookでログインする機能を実装でハマったところを説明]
(http://nigohiroki.hatenablog.com/entry/2013/08/16/234258)
##7.twitter認証
facebook認証と同様に以下の記事でひと通り出来る。
[Devise+OmniAuthでユーザ認証を実装する手順]
(http://qiita.com/kami30k/items/94aec2d94a2b4e9a1d0b)
以下、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をかけたらうまくいったので注意。