その10から続く
10.2.1 ユーザーにログインを要求する
ユーザーにログインを要求し、かつ自分以外のユーザー情報を変更できないように制御してみましょう。
(こういったセキュリティ上の制御機構をセキュリティモデルと呼びます)。
許可されていないページに対してアクセスするログイン済みのユーザーがいたら(例えば他人のユーザー編集ページにアクセスしようとしたら)、
ルートURLにリダイレクトさせるようにします。
転送させる仕組みを実装したいときは、Usersコントローラの中でbeforeフィルター
を使います。beforeフィルターは、before_actionメソッドを使って何らかの処理
が実行される直前に特定のメソッドを実行する仕組みです。
今回はユーザーにログインを要求するために、logged_in_userメソッドを
定義してbefore_action :logged_in_userという形式で使います
beforeフィルターに
logged_in_user
を追加する redapp/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アクションだけにこのフィルタが適用されるように制限をかけています
適用されるので、ここでは適切な:onlyオプション (ハッシュ) を渡すことで、
:editと:updateアクションだけにこのフィルタが適用されるように制限をかけています
今の段階ではテストは redになります。
rails test
テストユーザーでログインする green
test/integration/users_edit_test.rb