【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からすると、
「アカウント作成は認証を含んでいません」ということですね。

こちらもソースコードから追いたいところ。