8章 基本的なログイン機構
sessionはコントローラです! !
routesには追加した。
名前付きルート
test "should get new" do get login_path
黄色いところ謎。いつも変わる
まじ不明
セッションフォームとユーザー登録フォームの最大の違いは、セッションにはSessionモデルというものがなく、そのため@user
のようなインスタンス変数に相当するものもない点です。したがって、新しいセッションフォームを作成するときには、form_for
ヘルパーに追加の情報を独自に渡さなければなりません。
ユーザーをデータベースから見つけて検証する
def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) # ユーザーログイン後にユーザー情報のページにリダイレクトする
※authenticateメソッド:
引数に渡された文字列 (パスワード) をハッシュ化した値と、データベース内にあるpassword_digest
カラムの値を比較します
→言葉でまとめると
「ユーザーがデータベースにあり、かつ、認証に成功した場合にのみ」
ヘルパーモジュールって謎
include SessionsHelper
を全controllerの親である、ApplicationControllerに入れることで、治る。
module SessionsHelper # 渡されたユーザーでログインする def log_in(user) session[:user_id] = user.id end end
なぜここで、log_inメソッドを定義するのか。
(ヘルパーメソッドという。)
モジュールとは、クラスのようなものである。
→クラスと合わせて、モジュールを使用するすることで、
擬似的に多重継承を行っているようにコードを書くことができます。
Cuurent_userメソッド
別のページでユーザーIDを使いたいため、メソッド化する。
findでidを引数に取ると、ユーザーが登録出来ていない際も、nilでエラーにならない。
fixture
事前に用意したテストデータを読み込み、
常にDBの内容を一定に保つための仕組みのことを、フィクスチャと呼ぶ
8.24~8.3 テスト関連不明