Railsでログイン情報がブラウザを閉じると消えてしまう問題に悩まされていましたので、解決方法を記録しておきます。
今まで、ログイン時の処理は、
if @user.save
session[:user_id] = @user.id
と書いていました。これを
if @user.save
cookies.permanent.signed[:user_id] = @user.id
とすることにより、ブラウザを閉じてもログイン情報が消え無くなりました。
クッキーの中身を参照する場合は、
cookies.signed[:user_id]
を使います。
簡単な解説
Railsのsessionではcookieのexpireがセットされないため、ブラウザを閉じるとそのcookieは無効になってしまいます。(sessionはそうしたい時に使うことが想定されている)
一方、Railsのcookiesではexpireを指定することができます。
cookies.permanentとすると、expireを20年にすることができます。
なお、ブラウザでcookieの値が必要になる場合を除いては、cookiesにsignedを使って暗号化を施すと良いです。(認証情報の場合は必須)
詳しくは公式ドキュメントをご覧ください。
終わりに
私は現在、Web3のサービスの開発をしています。詳しくはこちらの記事をご覧下さい。
無料でイーサリアムが当たる、Web3時代の寄付サイトを作った話