ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

Ruby on Railsの認証 - 認証ユーザをcookieに保存する

Webアプリで認証する際に、ユーザ情報をcookieに保存しておき
過去に認証したユーザーについては認証済みユーザーとして扱いたいことがあるかと思います。

例えばtwitterなどは、書き込む前に毎回ログインしないですよね・・・。

上記を実現する方法を、Rails Castsで見つけたので、紹介しておきます。

#274 Remember Me & Reset Password
http://railscasts.com/episodes/274-remember-me-reset-password?view=asciicast
(※右上の日の丸をクリックすれば、日本語で読むことも可能です。)

具体的なソースは、RailsCastsの記事を見てもらうことにして
ここではポイントとなる箇所をピックアップしたいと思います。

1.セキュリティを考慮し、Randomな値をcookieに保存する。
cookieにユーザを一意に特定するためのキーを保持するので、これを元に他のユーザのキーを推測させてはなりません。
そのため、cookieに保持するキーはランダムな値とすることで、他のユーザのキーを推測できないようにします。
実装している箇所は、記事内の/app/models/user.rbで、SecureRandom.urlsafe_base64を使用することで
ランダムなキーを生成しています。

2.cookieへの永続的な保存を行う。
一度ログインしたユーザを、ブラウザを閉じた後にも認識できるように、ユーザ毎のキーは
cookieに永続的に保存しておく必要があります。
これを実装している箇所は、記事内の/app/controllers/sessions_controller.rbです。
ログイン画面で「Remember me」が選択された場合、cookies.permanentを使用して永続的にcookieに保存しています。

以上です。