LoginSignup
0
0

deviseでremember me機能を使わない場合はrememberableモジュールを削除すること

Last updated at Posted at 2023-11-14

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の内部を解明して読み解くのは難しいですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0