【77日目】【1日20分のRailsチュートリアル】【第8章】一時セッションでユーザーをログインできるようにする
今日は「8.2 ログイン」から。
Ruby on Railsチュートリアル 第4版が公開されましたが、
途中で切り替えるわけにもいかないので第3版で進めます。
8.2 ログイン
この節では、cookiesを使用する一時セッションでユーザーをログインできるようにします。このcookiesは、ブラウザを閉じると自動的に有効期限が切れるものを使用します。
ふむふむ。ブラウザを開いている間は有効な一時セッションをまず実装するのか。
Railsの全コントローラのベースクラス (=Application コントローラ) にこのモジュールをインクルードすれば、このアプリケーションのコントローラでも使えるようになります。
インクルードしました。
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery with: :exception include SessionsHelper end
8.2.1 log_inメソッド
同じログイン手法を様々な場所で使い回せるようにするために、Sessionsヘルパーにlog_inという名前のメソッドを定義することにします (リスト8.12)
app/helpers/sessions_helper.rb
module SessionsHelper # 渡されたユーザーでログインする def log_in(user) session[:user_id] = user.id end end
session[:user_id] = user.id
でユーザーのブラウザ内の一時cookiesに暗号化済みのユーザーIDが自動で作成されるそう。
攻撃者がたとえこの情報をcookiesから盗み出すことができたとしても、それを使って本物のユーザーとしてログインすることはできないのです。
(中略)
永続的なcookiesには、セッションハイジャックという攻撃を受ける可能性が常につきまといます。
へー。一時cookiesと永続的なcookiesは仕組み?が違うのか…。
ユーザーログインを行ってセッションのcreateアクションを完了し、ユーザーのプロフィールページにリダイレクトする準備ができました。
app/controllers/sessions_controller.rb
: if user && user.authenticate(params[:session][:password]) log_in user redirect_to user else :
今はログインしても画面表示が何も変わらないので、ユーザーがログイン中かどうかは、ブラウザセッションを直接確認しない限りわかりません。
このままでは困るので、ログインしていることがはっきりわかるようにします。
$ rails server -b $IP -p $PORT
ログインはできて、ログインしたユーザーのユーザーページは表示されたけど、
今自分がどのユーザーでログインしてるかは分からないね。。。
Chromeのデベロッパーツールでcookiesの情報見ればなんか保存されてるのは分かりました。
今日の作業時間は【27分】。
次は「8.2.2 現在のユーザー」から。