ぞえの技術めも

Ruby on Rails勉強中

【74日目】【1日20分のRailsチュートリアル】【第8章】ユーザーの検索と認証処理の実装

Ruby on Railsチュートリアル(第3版)

今日は「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 フラッシュメッセージを表示する」から。