【Rails】devise - current_user
経緯
ログイン機能・ユーザー登録機能の実装のまとめ・整理の備忘録として
内容
gem 'devise'
のヘルパーメソッドcurrent_user
について
ソース
current_userメソッドの定義されているのは lib/devise/controllers/helper.rb
のようです。
current_userメソッドも
authenticate_user!メソッドと同様に動的に生成されるメソッドです。
つまり、current_userメソッドとしてだけではなく、
動的にcurrent_adminなどとしても使用可能です。
current = warden.authenticate(scope: mapping)
の記述が示しているように、
Wardenで認証したレコードを返り値としたメソッドのようですね。
使い方
認証後のレコードをcurrent_#{hogehoge}
として
controller/view内で定義することができます。
関連エラーなど
・ログイン画面でログインした場合
→ current_userに認証されたUserモデルレコードが格納される
・ユーザー登録画面でアカウント作成しアプリ内の何らかのページにリダイレクトした場合
→ current_userには作成したアカウントは格納されていない!!
となるのがdeviseの仕様らしく、
→ current_userに作成したアカウントのUserモデルレコードが格納されたログイン状態と一旦なるものの、
ログイン状態が一定時間経つと解除されてしまうらしく、
<%= current_user.name >
などは current_userがnilとなっているため
NoMethodError (undefined method `name' for nil:NilClass):
のエラーが発生してしまうという事態が起こりました
(bypass_sign_in
メソッドで対応して解消できました)
deviseからすると、
「アカウント作成は認証を含んでいません」ということですね。
こちらもソースコードから追いたいところ。