学習記録

アウトプット用に作りました

authenticateメソッド

authenticateメソッドは、
has_secure_passwordメソッドをユーザーモデルで呼び出すだけで使えるようになるメソッド。

authetnticateメソッドはパスワードを引数として使う。
誤ったパスワードを渡されるとfalseを返す。
正しいパスワードを渡されるとtrueを返す。

user&.authenticate(session_params[:password])  

なんでここで&.(ぼっち演算子)を使ってメソッドを呼び出すのか?
→レシーバー(user)がnilでも、NoMethodErrorが出ないでnilを返すことができるから。

もしここでぼっち演算子を使わないと、
フォームにパスワードが格納されずに送られた場合、エラーが出てしまう。
(パスワードがnilだったらfalseの扱い)

def create
  user = User.find_by(email: session_params[:email])

  if user&.authenticate(session_params[:password])  
    session[:user_id] = user.id
    redirect_to root_url
  else
    render :new
  end
end

送られてきたメールアドレスでユーザーを検索する。
ユーザーが見つかったら、送られてきたパスワードを使ってメールアドレスとパスワードが一致するユーザーを探す。
一致するとセッションにuser_idを格納してroot_urlへ飛ぶ。
一致しない = falseかnilが返るとnewにレンダリングされる。