日別アーカイブ: 2021年11月25日

Rails-tutorialのまとめ10.2(第10章 ユーザーの更新の続き 主に演習)

その10から続く

10.2.1 ユーザーにログインを要求する

ユーザーにログインを要求し、かつ自分以外のユーザー情報を変更できないように制御してみましょう。
(こういったセキュリティ上の制御機構をセキュリティモデルと呼びます)。

許可されていないページに対してアクセスするログイン済みのユーザーがいたら(例えば他人のユーザー編集ページにアクセスしようとしたら)、
ルートURLにリダイレクトさせるようにします。

転送させる仕組みを実装したいときは、Usersコントローラの中でbeforeフィルター
を使います。beforeフィルターは、before_actionメソッドを使って何らかの処理
が実行される直前に特定のメソッドを実行する仕組みです。

今回はユーザーにログインを要求するために、logged_in_userメソッドを
定義してbefore_action :logged_in_userという形式で使います

beforeフィルターにlogged_in_userを追加する red
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]  .
  .
  .
  private

    def user_params
      params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)
    end

    # beforeアクション
    # ログイン済みユーザーかどうか確認
    def logged_in_user
unless logged_in?flash[:danger] = "Please log in."redirect_to login_urlend    end
end
デフォルトでは、beforeフィルターはコントローラ内のすべてのアクションに
適用されるので、ここでは適切な:onlyオプション (ハッシュ) を渡すことで、
:editと:updateアクションだけにこのフィルタが適用されるように制限をかけています
今の段階ではテストは redになります。
rails test
テストユーザーでログインする green
test/integration/users_edit_test.rb

続きを読む