devise で cookie からログインしたかどうかを判定する

devise

Rails で認証の仕組みを実装する時に利用する devise、便利ですよね。

細かいことですが、掲題の件をどのように実装するか確認したので、自分用のメモ。

Devise::Strategies::Rememberableauthenticate! メソッドで cookie の内容を確認して認証しているので、その中で session にフラグを立てる実装にしました。

用途としては、ユーザー情報変更等の処理の前に、このフラグが立っていたら、パスワードを再入力してもらう、ということが考えられます。

require "devise/strategies/rememberable"
class Devise::Strategies::Rememberable < Devise::Strategies::Authenticatable
  def authenticate!
    resource = mapping.to.serialize_from_cookie(*remember_cookie)

    unless resource
      cookies.delete(remember_key)
      return pass
    end

    if validate(resource)
      session[:login_via_cookie] = true
      success!(resource)
    end
  end
end
Warden::Strategies.add :rememberable, Devise::Strategies::Rememberable

このファイルを initilaizer 辺りで require してオーバーライドすればOK。

devise 3.2.4 で確認済みです。