クッキーを使って他ユーザーの情報を設定できないように設定
前回、ユーザー編集機能を作成し、ログインしていないユーザーは編集画面を表示できず、ログイン画面にリダイレクトするように設定しました。今回はさらにクッキーを使ってそのユーザー名を確認し、そのユーザーの情報のみ変更可とし、他人のユーザー情報を変更できないようにします。
前回の設定のみだとユーザーIDが1のユーザーの編集画面のURLは、"http://localhost:3000/users/1/edit"ですが、URL内のユーザーIDに相当する部分を他のユーザーの番号にすると他のユーザーの編集画面を表示でき、変更することも出来てしまいます。
クッキーを使ってログイン中のユーザーを確認し、他のユーザーの情報を編集できないようにします。
●Usersコントローラに同一ログインユーザーかチェックするbeforeフィルター設定
$ vi app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :correct_user, only: [:edit, :update]
:
def edit
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
redirect_to user_path
else
render 'edit'
end
end
private
def correct_user
user = User.find(params[:id])
current_user = User.find_by(remember_token: cookies[:remember_token])
redirect_to login_users_path unless user == current_user
end
●動作確認
ログイン後、下記URL部のユーザーIDを他のユーザーのIDを入力してアクセスすると、
http://localhost:3000/users/1/edit
他ユーザーの編集画面ではなく、ログインページにリダイレクトされる事を確認しました。
| アプリ作成 | 10:04 | comments:0 | trackbacks:0 | TOP↑