QA@IT

OmniAuthだけでブラウザを落としても、ログイン状態を保持する方法はありませんか?

2904 PV

Railsのアプリケーションを開発するとき、認証にOmniAuthを使ってます。
Deviseと組み合わせ、Remarkableモジュールを使うと、ログイン状態をpersistent cookieに保存できるようですが、
OmniAuthだけで同様の事ができないでしょうか?
(emailとか、そういう情報を持たずに済むようにしたいのです。)
ブラウザを落としても、ログイン状態を保持できるようにしたいのです。

よろしくお願いします。

回答

ログイン時にsession[:user_id]だけでなく、expiresを指定したcookieを作成すると実現できました。

  • ログイン時 cookies.signed[:user_id] = {:value => user.id, :expires => 1.year.from_now}
  • ログアウト cookies.signed[:user_id] = nil
編集 履歴 (0)
  • あー、ブラウザを落とした時にセッションが切れないようにしたいという事ですね。質問を読み切れていませんでした。それなら「request.session_options[:expire_after] = 2.weeks」(生存期間2週間の場合)を設定する事でも実現可能だと思います。 -
  • ありがとうございます。勉強になります。そうすると、セッションの内容が全て2週間保存されることになりませんか? -
  • そうですね。
    セッションそのものの有効期限設定だと思います。
    -

下記のような形では用途に合わないでしょうか?

・ログイン

session[:user_id] = user.id

・ログアウト

session[:user_id] = nil

・ログイン判定

if User.where( id: session[:user_id] ).exist?

[2012/07/24追記]

・セッションの有効期限指定(2週間の場合)

request.session_options[:expire_after] = 2.weeks
編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。