ウェブサービスを作っています。

登録後からログインしたままにする Devise の設定

Devise (v3.2.2) で会員登録した後、ブラウザを閉じるとログアウト状態になってしまいます。

これを回避し、会員登録の直後から、常にログインしたままとする方法を考えてみました。

app/controllers/users/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController
  def create
    super { |resource| resource.remember_me = true }
  end
end

Devise::RegistrationsController#create は、ブロックを渡すと処理してくれるのでこのようにします。

パスワードリセット後もログイン状態を維持するには、app/controllers/users/passwords_controller.rb に同様の処理を書きます。

class Users::PasswordsController < Devise::PasswordsController
  def update
    super { |resource| resource.remember_me = true }
  end
end

あとは config/routes.rb で、これらのコントローラを参照するようにすれば OK です。

devise_for(:users,
    controllers: {
      registrations: 'users/registrations',
      passwords: 'users/passwords'
    })

ログイン状態の有効期限を延ばす設定

このようにして毎日アクセスしていても、ある日突然ログアウトしていることがあります。

これを防ぐには、config/initializers/devise.rb で以下の設定をします。

config.extend_remember_period = true

これで毎日アクセスするような場合は、勝手にログアウトされることがなくなります。