【74日目】【1日20分のRailsチュートリアル】【第8章】ユーザーの検索と認証処理の実装
今日は「8.1.3 ユーザーの検索と認証」から。
8.1.3 ユーザーの検索と認証
最初に最小限のcreateアクションをSessionsコントローラで定義し、空のnewアクションとdestroyアクションもついでに作成しておきましょう。
作成しました。
app/controllers/sessions_controller.rb
class SessionsController < ApplicationController def new end def create render 'new' end def destroy end end
フォームから送信されたセッション情報はparams
ハッシュから取得できるそう。
・メールアドレス
params[:session][:email]
・パスワード
params[:session][:password]
Active Recordが提供するUser.find_byメソッド (6.1.4) と、has_secure_passwordが提供するauthenticateメソッド (6.3.4) を使用します。
authenticateメソッドは認証に失敗したときにfalseを返す (6.3.4) ことを思い出しましょう。以上をまとめてユーザーログインを実装したものをリスト8.5に示します。
上記を踏まえてcreateアクションにユーザー認証処理を追加。
app/controllers/sessions_controller.rb
def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) # ユーザーログイン後にユーザー情報のページにリダイレクトする else # エラーメッセージを作成する render 'new' end end
Rubyではnilとfalse以外のすべてのオブジェクトは、真偽値ではtrueになる (4.2.3) という性質を考慮すると、&&の前後の値の組み合わせは表8.2のようになります。
(中略) 言葉でまとめると「ユーザーがデータベースにあり、かつ、認証に成功した場合にのみ」となります。
user && user.authenticate(params[:session][:password])
の解説。なるほどね~
「ユーザーの認証」って聞くと難しそうなイメージしたけどコード見るとそうでもないね。シンプル!
authenticate
メソッド便利。
今日の作業時間は【20分】。
次は「8.1.4 フラッシュメッセージを表示する」から。