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にレンダリングされる。