deviseを使い認証機能を作る際、remember me機能が必要ない場合、deviseメソッドの引数に、:rememberable
を付けない必要があります。
class User < ApplicationRecord
# こちらの引数から:rememberableを削除する事
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end
deviseメソッドの実装はこうなっています。
def devise(*modules)
options = modules.extract_options!.dup
# ~~略~~
rememberableモジュールの中身はこのようになっています。
module Rememberable
extend ActiveSupport::Concern
attr_accessor :remember_me
# ~~略~~
今後さらに調べようと思いますが、railsアプリを初期化する際に、deviseライブラリを読み込んで、:rememberable
モジュールが有効化されている(モデルに記載されている)場合、ログイン&ログアウトの認証の際に、読みに行く設定になっているのだと思います。
なので、利用しない際は、:rememberable
を削除する必要があるのだと思います。
追記
単純にdeviseは着脱可能な様々な認証機能を提供しているので、remember me機能を使わないんだったら、usersテーブルを作成する際にremember_created_at
のカラムを作らず、:rememberable
モジュールを読み込まなければ良い、というだけの話だったかも知れません
class DeviseCreateUsers < ActiveRecord::Migration[7.0]
def change
create_table :users do |t|
## Rememberable
# t.datetime :remember_created_at # 利用しないなら、ここをコメントアウトしてカラムをつくらず、モジュールも読み込まなければ良いだけ
今後生かしたいこと
ライブラリの実装を見に行く前に、READMEでdeviseについて説明している箇所を読んで概要を掴んだ方が早そうですね。
deviseのREADMEにもこのように書かれています。
https://github.com/heartcombo/devise
本当に必要なものだけを使用するというモジュール性の概念に基づいています。
必要なものを使ってね、と書かれています。
Rememberableモジュールの説明では、以下のようにincludeした際に利用できるメソッドが書かれています。
https://www.rubydoc.info/github/heartcombo/devise/main/Devise/Models/Rememberable
Rememberableモジュールを利用するには、remember_created_at
カラムが必要、というだけの話なのかな、、
クラスメソッドとして定義されているこのメソッド名にrequired_fields
というメソッドがあり、名前と中身を勘案するとremember_created_at
が必要だよ、と読み解ける感じがするので、そういう理解でいいのかな、、
def self.required_fields(klass)
[:remember_created_at]
end
deviseの内部を解明して読み解くのは難しいですね。