【Rails】Deviseでログイン後のセッション時間を延長させる方法
こんにちは、okutani(@okutani_t)です。本記事では「Deviseでログインしたあとのセッション時間を延長させる」方法について解説しています。
Deviseについて知りたい方は以下のGitHubページをご確認ください。
LINKplataformatec/devise: Flexible authentication solution for Rails with Warden.
僕が運営する「LINKブロガー専用のコミュニティサイト『bcafe』」で、気がついたら毎回ログイン状態が切れている現象を見つけたので対応してみました。
対応手順は以下のとおりです。
- Userモデルに:timeoutableを追加
- Deviseのセッション有効期限を設定
- Railsのセッション有効期限を設定
それでは、順を追って解説していきます。
参考Rails の session の有効期限を無期限にする – 9mのパソコン日記
スポンサーリンク
Userモデルに:timeoutableを追加
「app/models/user.rb」の該当箇所に「:timeoutable」を追記。
class User < ApplicationRecord
devise ...省略..., :timeoutable
end
これで、Deviseでセッション時間を設定することができます。
Deviseのセッション有効期限を設定
「config/initializers/devise.rb」に以下を追記。
config.timeout_in = 1.month
1ヶ月はログイン状態を保持するように設定しました。
Railsのセッション有効期限を設定
「config/initializers/session_store.rb」を以下のように編集。
Rails.application.config.session_store :cookie_store, key: '_hoge_session', expire_after: 1.month
「_hoge_session」の部分はプロジェクトの設定に合わせてください。
これで、1ヶ月はログインセッションが切れず、1ヶ月以内にアクセスすればさらに1ヶ月セッション時間が延長されます。
ちなみに、「config/initializers/*」以下を編集したので、サーバーの再起動を忘れずに。
確認
以下の手順で設定を確認できます。
$ rails c
[1] pry(main)> User.timeout_in
=> 1 month
あとは1ヶ月間ログイン状態が保たれているのを確認すればOKですね。
Deviseのデフォルトのセッション時間は30分なので、それ以上になっていることが確認できればひとまず大丈夫ですね。
まとめ
本記事では、Deviseでログイン後のセッション時間を延長させる方法について解説しました。
気がついたらログイン状態が切れるサービスだとユーザーが離れて行ってしまう可能性があるので、忘れずに対応しておくと良いですね。
参考になれば幸いです。
Web開発のお仕事を募集しています
フリーランスのエンジニアとして、Webシステム開発のお仕事依頼を随時募集しています(現在の業務量によってお受けできない場合もあります)。
「Ruby on Rails」「JavaScript(jQuery, Reactなど)」「HTML + CSS」を用いたシステム開発、「Heroku」等を用いたサーバー構築・運用、「Git」や「GitHub」を利用したソーシャルコーディングなどに対応しています。
ご依頼を検討している方は、下記リンク本ブログからのお問い合わせ、もしくはokutaniのポートフォリオからご連絡ください。
LINKお問い合わせ
スポンサーリンク