gem Deviseでログイン日時を表示する

環境


DeviseはRubyのgemで、認証機能を簡単に実装できます。

Deviseのデフォルトは、findメソッドから取得できるカラムが決まっています。
例えば、最終ログイン日(:current_sign_in_at)などは取得できないのですが、それを取得できるようにカスタマイズする方法です。


findで取得できないカラムは、以下の定数で設定されています。

gems\devise-4.3.0\lib\devise\models\authenticatable.rb L:57

module Devise
 module Models

  BLACKLIST_FOR_SERIALIZATION = [:encrypted_password, :reset_password_token, :reset_password_sent_at,
    :remember_created_at, :sign_in_count, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip,
    :last_sign_in_ip, :password_salt, :confirmation_token, :confirmed_at, :confirmation_sent_at,
    :remember_token, :unconfirmed_email, :failed_attempts, :unlock_token, :locked_at]

 end
end

Module: Devise::Models::Authenticatable — Documentation for plataformatec/devise (master)


user.rbのモデルでBLACKLIST内から取得したいカラムを削除します。

class User < ApplicationRecord

 fillable = [:current_sign_in_at]
 Devise::Models::Authenticatable::BLACKLIST_FOR_SERIALIZATION.delete_if { |x|
  fillable.include?(x)
 }

end

ruby on rails - A missing attribute when using { render json: } - Stack Overflow


他のカラムも取得したければ、fillableにカンマ区切りで追加していけばOK!