🌱

【Ruby on Rails】SorceryのサブモジュールSession Timeout機能を、アプリに追加する

2024/08/20に公開

はじめに

現在スクールの卒業制作で、アプリ開発を行なっております。
今回技術記事を投稿するアプリを開発しており、認証はgem 'Sorcery'を使用しています。
今回のアプリの特性上、記事を書いている時は画面に滞在している時間が長いため、SorceryのサブモジュールSession Timeout機能を追加しました。

記事もあまりなかったので、今回はこの記事を書いてみました。
参考になりましたら幸いです。

環境

Rails 7.1.3.4
gem 'sorcery' 0.17.0

Session Timeout機能とは?

こちらの記事にある通り、指定した時間でセッションを無効にする機能になります。
gem 'sorcery'を導入した段階で、config/initializers/sorcery.rbファイルが自動的に作成されるため、このファイルのコードを修正して機能を実装します。

基本的には、こちらのwiki通りとなります。

  • config/initializers/sorcery.rb
Rails.application.config.sorcery.submodules = %i[reset_password external session_timeout]

config.session_timeout = 10800

config.session_timeout_from_last_action = true

追記箇所

  • sorcery.submodules内に、session_timeoutを追記します。これを追記せず他のコードを修正すると、Nomethodエラーが発生するため注意が必要です。
  • config.session_timeout: デフォルトではコメントアウトされているので、コメントアウトを外します。
    また通常のセッションが切れる時間は3600秒(1時間)で設定されているため、10800秒(3時間)に変更しました。
  • config.session_timeout_from_last_action: こちらの設定をtrueに変更。上記は、

アクセスのたびにセッションタイムアウトの時間がリセットされる(falseならログイン時点からconfig.session_timeout秒経過したらセッションタイムアウトする)。デフォルトはfalse。

とのことで、今回trueに変更しました。
以上で設定は終了になります。

最後に

記事アプリの特性上、せッションタイムアウトまで気を使うべきと終盤になって気がつきました。
パスワードリセット機能、GitHubでの外部認証とは異なり、簡単に導入できよかったです。
最後までご覧いただきありがとうございました。

Discussion