正しいユーザーを要求する
セキュリティモデルが正しく実装されている確信を持つために、テスト駆動開発で進めていきます。
Usersコントローラのテストを補完するように、テストを追加するところから始めていきます。
fixtureファイルに2人目のユーザーを追加する
test/fixtures/users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>
間違ったユーザーが編集しようとしたときのテスト
test/controllers/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
.
.
.
test "should redirect edit when logged in as wrong user" do
log_in_as(@other_user)
get edit_user_path(@user)
assert flash.empty?
# わからない
assert_redirected_to root_url
end
test "should redirect update when logged in as wrong user" do
log_in_as(@other_user)
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert flash.empty?
assert_redirected_to root_url
end
end
beforeフィルターを使って編集/更新ページを保護する
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
# before_actionメソッドを使って何らかの処理が実行される直前に
# 特定のメソッドを実行する仕組み
# ログインをさせる
# :editと:updateアクションだけ
.
.
.
# ログイン済みユーザーかどうか確認
def logged_in_user
unless logged_in?
# もしも、評価が偽(false)であれば○○する
flash[:danger] = "Please log in."
# ログインされていなければメッセージを表示する
redirect_to login_url
# ログインページを表示させる
end
end
# 正しいユーザーかどうか確認
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
# データベースと照らし合わせて無かったらホーム画面にいく。
end
end
テスト
ubuntu:~/environment/sample_app (updating-users) $ rails t
Running via Spring preloader in process 21855
Started with run options --seed 35762
35/35: [============================] 100% Time: 00:00:03, Time: 00:00:03
Finished in 3.49451s
35 tests, 85 assertions, 0 failures, 0 errors, 0 skips
current_user?メソッド
app/helpers/sessions_helper.rb
module SessionsHelper
.
.
.
# 記憶トークンcookieに対応するユーザーを返す
def current_user
if (user_id = session[:user_id])
# ログイン中のidを代入する
# 永続セッション(ログイン中)にするため
@current_user ||= User.find_by(id: user_id)
# カレントユーザーまたは検索結果があったものを代入する
elsif (user_id = cookies.signed[:user_id])
#
user = User.find_by(id: user_id)
# idでユーザーを探す
if user && user.authenticated?(cookies[:remember_token])
# ユーザーが有効であり、記憶トークンも認証されたら
log_in user
# ログインする
@current_user = user
# カレントユーザーに代入するかな
end
end
end
# 渡されたユーザーがカレントユーザーであればtrueを返す
def current_user?(user)
user && user == current_user
# 有効且つデータベースにあるか?
# trueを返す
end
.
.
.
end
####### 正しいユーザーを要求する
セキュリティモデルが正しく実装されている確信を持つために、テスト駆動開発で進めていきます。
Usersコントローラのテストを補完するように、テストを追加するところから始めていきます。
fixtureファイルに2人目のユーザーを追加する
test/fixtures/users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>
間違ったユーザーが編集しようとしたときのテスト
test/controllers/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
.
.
.
test "should redirect edit when logged in as wrong user" do
log_in_as(@other_user)
get edit_user_path(@user)
assert flash.empty?
# わからない
assert_redirected_to root_url
end
test "should redirect update when logged in as wrong user" do
log_in_as(@other_user)
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert flash.empty?
assert_redirected_to root_url
end
end
beforeフィルターを使って編集/更新ページを保護する
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
# before_actionメソッドを使って何らかの処理が実行される直前に
# 特定のメソッドを実行する仕組み
# ログインをさせる
# :editと:updateアクションだけ
.
.
.
# ログイン済みユーザーかどうか確認
def logged_in_user
unless logged_in?
# もしも、評価が偽(false)であれば○○する
flash[:danger] = "Please log in."
# ログインされていなければメッセージを表示する
redirect_to login_url
# ログインページを表示させる
end
end
# 正しいユーザーかどうか確認
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
# データベースと照らし合わせて無かったらホーム画面にいく。
end
end
テスト
ubuntu:~/environment/sample_app (updating-users) $ rails t
Running via Spring preloader in process 21855
Started with run options --seed 35762
35/35: [============================] 100% Time: 00:00:03, Time: 00:00:03
Finished in 3.49451s
35 tests, 85 assertions, 0 failures, 0 errors, 0 skips
current_user?メソッド
app/helpers/sessions_helper.rb
module SessionsHelper
.
.
.
# 記憶トークンcookieに対応するユーザーを返す
def current_user
if (user_id = session[:user_id])
# ログイン中のidを代入する
# 永続セッション(ログイン中)にするため
@current_user ||= User.find_by(id: user_id)
# カレントユーザーまたは検索結果があったものを代入する
elsif (user_id = cookies.signed[:user_id])
#
user = User.find_by(id: user_id)
# idでユーザーを探す
if user && user.authenticated?(cookies[:remember_token])
# ユーザーが有効であり、記憶トークンも認証されたら
log_in user
# ログインする
@current_user = user
# カレントユーザーに代入するかな
end
end
end
# 渡されたユーザーがカレントユーザーであればtrueを返す
def current_user?(user)
user && user == current_user
# 有効且つデータベースにあるか?
# trueを返す
end
.
.
.
end
####### 正しいユーザーを要求する
セキュリティモデルが正しく実装されている確信を持つために、テスト駆動開発で進めていきます。
Usersコントローラのテストを補完するように、テストを追加するところから始めていきます。
fixtureファイルに2人目のユーザーを追加する
test/fixtures/users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>
間違ったユーザーが編集しようとしたときのテスト
test/controllers/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
.
.
.
test "should redirect edit when logged in as wrong user" do
log_in_as(@other_user)
get edit_user_path(@user)
assert flash.empty?
# わからない
assert_redirected_to root_url
end
test "should redirect update when logged in as wrong user" do
log_in_as(@other_user)
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert flash.empty?
assert_redirected_to root_url
end
end
beforeフィルターを使って編集/更新ページを保護する
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
# before_actionメソッドを使って何らかの処理が実行される直前に
# 特定のメソッドを実行する仕組み
# ログインをさせる
# :editと:updateアクションだけ
.
.
.
# ログイン済みユーザーかどうか確認
def logged_in_user
unless logged_in?
# もしも、評価が偽(false)であれば○○する
flash[:danger] = "Please log in."
# ログインされていなければメッセージを表示する
redirect_to login_url
# ログインページを表示させる
end
end
# 正しいユーザーかどうか確認
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
# データベースと照らし合わせて無かったらホーム画面にいく。
end
end
テスト
ubuntu:~/environment/sample_app (updating-users) $ rails t
Running via Spring preloader in process 21855
Started with run options --seed 35762
35/35: [============================] 100% Time: 00:00:03, Time: 00:00:03
Finished in 3.49451s
35 tests, 85 assertions, 0 failures, 0 errors, 0 skips
current_user?メソッド
app/helpers/sessions_helper.rb
module SessionsHelper
.
.
.
# 記憶トークンcookieに対応するユーザーを返す
def current_user
if (user_id = session[:user_id])
# ログイン中のidを代入する
# 永続セッション(ログイン中)にするため
@current_user ||= User.find_by(id: user_id)
# カレントユーザーまたは検索結果があったものを代入する
elsif (user_id = cookies.signed[:user_id])
#
user = User.find_by(id: user_id)
# idでユーザーを探す
if user && user.authenticated?(cookies[:remember_token])
# ユーザーが有効であり、記憶トークンも認証されたら
log_in user
# ログインする
@current_user = user
# カレントユーザーに代入するかな
end
end
end
# 渡されたユーザーがカレントユーザーであればtrueを返す
def current_user?(user)
user && user == current_user
# 有効且つデータベースにあるか?
# trueを返す
end
.
.
.
end
####### 正しいユーザーを要求する
セキュリティモデルが正しく実装されている確信を持つために、テスト駆動開発で進めていきます。
Usersコントローラのテストを補完するように、テストを追加するところから始めていきます。
fixtureファイルに2人目のユーザーを追加する
test/fixtures/users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>
間違ったユーザーが編集しようとしたときのテスト
test/controllers/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
.
.
.
test "should redirect edit when logged in as wrong user" do
log_in_as(@other_user)
get edit_user_path(@user)
assert flash.empty?
# わからない
assert_redirected_to root_url
end
test "should redirect update when logged in as wrong user" do
log_in_as(@other_user)
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert flash.empty?
assert_redirected_to root_url
end
end
beforeフィルターを使って編集/更新ページを保護する
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
# before_actionメソッドを使って何らかの処理が実行される直前に
# 特定のメソッドを実行する仕組み
# ログインをさせる
# :editと:updateアクションだけ
.
.
.
# ログイン済みユーザーかどうか確認
def logged_in_user
unless logged_in?
# もしも、評価が偽(false)であれば○○する
flash[:danger] = "Please log in."
# ログインされていなければメッセージを表示する
redirect_to login_url
# ログインページを表示させる
end
end
# 正しいユーザーかどうか確認
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
# データベースと照らし合わせて無かったらホーム画面にいく。
end
end
テスト
ubuntu:~/environment/sample_app (updating-users) $ rails t
Running via Spring preloader in process 21855
Started with run options --seed 35762
35/35: [============================] 100% Time: 00:00:03, Time: 00:00:03
Finished in 3.49451s
35 tests, 85 assertions, 0 failures, 0 errors, 0 skips
current_user?メソッド
app/helpers/sessions_helper.rb
module SessionsHelper
.
.
.
# 記憶トークンcookieに対応するユーザーを返す
def current_user
if (user_id = session[:user_id])
# ログイン中のidを代入する
# 永続セッション(ログイン中)にするため
@current_user ||= User.find_by(id: user_id)
# カレントユーザーまたは検索結果があったものを代入する
elsif (user_id = cookies.signed[:user_id])
#
user = User.find_by(id: user_id)
# idでユーザーを探す
if user && user.authenticated?(cookies[:remember_token])
# ユーザーが有効であり、記憶トークンも認証されたら
log_in user
# ログインする
@current_user = user
# カレントユーザーに代入するかな
end
end
end
# 渡されたユーザーがカレントユーザーであればtrueを返す
def current_user?(user)
user && user == current_user
# 有効且つデータベースにあるか?
# trueを返す
end
.
.
.
end
####### 正しいユーザーを要求する
セキュリティモデルが正しく実装されている確信を持つために、テスト駆動開発で進めていきます。
Usersコントローラのテストを補完するように、テストを追加するところから始めていきます。
fixtureファイルに2人目のユーザーを追加する
test/fixtures/users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>
間違ったユーザーが編集しようとしたときのテスト
test/controllers/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
.
.
.
test "should redirect edit when logged in as wrong user" do
log_in_as(@other_user)
get edit_user_path(@user)
assert flash.empty?
# わからない
assert_redirected_to root_url
end
test "should redirect update when logged in as wrong user" do
log_in_as(@other_user)
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert flash.empty?
assert_redirected_to root_url
end
end
beforeフィルターを使って編集/更新ページを保護する
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
# before_actionメソッドを使って何らかの処理が実行される直前に
# 特定のメソッドを実行する仕組み
# ログインをさせる
# :editと:updateアクションだけ
.
.
.
# ログイン済みユーザーかどうか確認
def logged_in_user
unless logged_in?
# もしも、評価が偽(false)であれば○○する
flash[:danger] = "Please log in."
# ログインされていなければメッセージを表示する
redirect_to login_url
# ログインページを表示させる
end
end
# 正しいユーザーかどうか確認
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
# データベースと照らし合わせて無かったらホーム画面にいく。
end
end
テスト
ubuntu:~/environment/sample_app (updating-users) $ rails t
Running via Spring preloader in process 21855
Started with run options --seed 35762
35/35: [============================] 100% Time: 00:00:03, Time: 00:00:03
Finished in 3.49451s
35 tests, 85 assertions, 0 failures, 0 errors, 0 skips
current_user?メソッド
app/helpers/sessions_helper.rb
module SessionsHelper
.
.
.
# 記憶トークンcookieに対応するユーザーを返す
def current_user
if (user_id = session[:user_id])
# ログイン中のidを代入する
# 永続セッション(ログイン中)にするため
@current_user ||= User.find_by(id: user_id)
# カレントユーザーまたは検索結果があったものを代入する
elsif (user_id = cookies.signed[:user_id])
#
user = User.find_by(id: user_id)
# idでユーザーを探す
if user && user.authenticated?(cookies[:remember_token])
# ユーザーが有効であり、記憶トークンも認証されたら
log_in user
# ログインする
@current_user = user
# カレントユーザーに代入するかな
end
end
end
# 渡されたユーザーがカレントユーザーであればtrueを返す
def current_user?(user)
user && user == current_user
# 有効且つデータベースにあるか?
# trueを返す
end
.
.
.
end
####### 正しいユーザーを要求する
セキュリティモデルが正しく実装されている確信を持つために、テスト駆動開発で進めていきます。
Usersコントローラのテストを補完するように、テストを追加するところから始めていきます。
fixtureファイルに2人目のユーザーを追加する
test/fixtures/users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>
間違ったユーザーが編集しようとしたときのテスト
test/controllers/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
.
.
.
test "should redirect edit when logged in as wrong user" do
log_in_as(@other_user)
get edit_user_path(@user)
assert flash.empty?
# わからない
assert_redirected_to root_url
end
test "should redirect update when logged in as wrong user" do
log_in_as(@other_user)
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert flash.empty?
assert_redirected_to root_url
end
end
beforeフィルターを使って編集/更新ページを保護する
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
# before_actionメソッドを使って何らかの処理が実行される直前に
# 特定のメソッドを実行する仕組み
# ログインをさせる
# :editと:updateアクションだけ
.
.
.
# ログイン済みユーザーかどうか確認
def logged_in_user
unless logged_in?
# もしも、評価が偽(false)であれば○○する
flash[:danger] = "Please log in."
# ログインされていなければメッセージを表示する
redirect_to login_url
# ログインページを表示させる
end
end
# 正しいユーザーかどうか確認
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
# データベースと照らし合わせて無かったらホーム画面にいく。
end
end
テスト
ubuntu:~/environment/sample_app (updating-users) $ rails t
Running via Spring preloader in process 21855
Started with run options --seed 35762
35/35: [============================] 100% Time: 00:00:03, Time: 00:00:03
Finished in 3.49451s
35 tests, 85 assertions, 0 failures, 0 errors, 0 skips
current_user?メソッド
app/helpers/sessions_helper.rb
module SessionsHelper
.
.
.
# 記憶トークンcookieに対応するユーザーを返す
def current_user
if (user_id = session[:user_id])
# ログイン中のidを代入する
# 永続セッション(ログイン中)にするため
@current_user ||= User.find_by(id: user_id)
# カレントユーザーまたは検索結果があったものを代入する
elsif (user_id = cookies.signed[:user_id])
#
user = User.find_by(id: user_id)
# idでユーザーを探す
if user && user.authenticated?(cookies[:remember_token])
# ユーザーが有効であり、記憶トークンも認証されたら
log_in user
# ログインする
@current_user = user
# カレントユーザーに代入するかな
end
end
end
# 渡されたユーザーがカレントユーザーであればtrueを返す
def current_user?(user)
user && user == current_user
# 有効且つデータベースにあるか?
# trueを返す
end
.
.
.
end
####### 正しいユーザーを要求する
セキュリティモデルが正しく実装されている確信を持つために、テスト駆動開発で進めていきます。
Usersコントローラのテストを補完するように、テストを追加するところから始めていきます。
fixtureファイルに2人目のユーザーを追加する
test/fixtures/users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>
間違ったユーザーが編集しようとしたときのテスト
test/controllers/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
.
.
.
test "should redirect edit when logged in as wrong user" do
log_in_as(@other_user)
get edit_user_path(@user)
assert flash.empty?
# わからない
assert_redirected_to root_url
end
test "should redirect update when logged in as wrong user" do
log_in_as(@other_user)
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert flash.empty?
assert_redirected_to root_url
end
end
beforeフィルターを使って編集/更新ページを保護する
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
# before_actionメソッドを使って何らかの処理が実行される直前に
# 特定のメソッドを実行する仕組み
# ログインをさせる
# :editと:updateアクションだけ
.
.
.
# ログイン済みユーザーかどうか確認
def logged_in_user
unless logged_in?
# もしも、評価が偽(false)であれば○○する
flash[:danger] = "Please log in."
# ログインされていなければメッセージを表示する
redirect_to login_url
# ログインページを表示させる
end
end
# 正しいユーザーかどうか確認
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
# データベースと照らし合わせて無かったらホーム画面にいく。
end
end
テスト
ubuntu:~/environment/sample_app (updating-users) $ rails t
Running via Spring preloader in process 21855
Started with run options --seed 35762
35/35: [============================] 100% Time: 00:00:03, Time: 00:00:03
Finished in 3.49451s
35 tests, 85 assertions, 0 failures, 0 errors, 0 skips
current_user?メソッド
app/helpers/sessions_helper.rb
module SessionsHelper
.
.
.
# 記憶トークンcookieに対応するユーザーを返す
def current_user
if (user_id = session[:user_id])
# ログイン中のidを代入する
# 永続セッション(ログイン中)にするため
@current_user ||= User.find_by(id: user_id)
# カレントユーザーまたは検索結果があったものを代入する
elsif (user_id = cookies.signed[:user_id])
#
user = User.find_by(id: user_id)
# idでユーザーを探す
if user && user.authenticated?(cookies[:remember_token])
# ユーザーが有効であり、記憶トークンも認証されたら
log_in user
# ログインする
@current_user = user
# カレントユーザーに代入するかな
end
end
end
# 渡されたユーザーがカレントユーザーであればtrueを返す
def current_user?(user)
user && user == current_user
# 有効且つデータベースにあるか?
# trueを返す
end
.
.
.
end
####### 正しいユーザーを要求する
セキュリティモデルが正しく実装されている確信を持つために、テスト駆動開発で進めていきます。
Usersコントローラのテストを補完するように、テストを追加するところから始めていきます。
fixtureファイルに2人目のユーザーを追加する
test/fixtures/users.yml
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: duchess@example.gov
password_digest: <%= User.digest('password') %>
間違ったユーザーが編集しようとしたときのテスト
test/controllers/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
.
.
.
test "should redirect edit when logged in as wrong user" do
log_in_as(@other_user)
get edit_user_path(@user)
assert flash.empty?
# わからない
assert_redirected_to root_url
end
test "should redirect update when logged in as wrong user" do
log_in_as(@other_user)
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert flash.empty?
assert_redirected_to root_url
end
end
beforeフィルターを使って編集/更新ページを保護する
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
# before_actionメソッドを使って何らかの処理が実行される直前に
# 特定のメソッドを実行する仕組み
# ログインをさせる
# :editと:updateアクションだけ
.
.
.
# ログイン済みユーザーかどうか確認
def logged_in_user
unless logged_in?
# もしも、評価が偽(false)であれば○○する
flash[:danger] = "Please log in."
# ログインされていなければメッセージを表示する
redirect_to login_url
# ログインページを表示させる
end
end
# 正しいユーザーかどうか確認
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
# データベースと照らし合わせて無かったらホーム画面にいく。
end
end
テスト
ubuntu:~/environment/sample_app (updating-users) $ rails t
Running via Spring preloader in process 21855
Started with run options --seed 35762
35/35: [============================] 100% Time: 00:00:03, Time: 00:00:03
Finished in 3.49451s
35 tests, 85 assertions, 0 failures, 0 errors, 0 skips
current_user?メソッド
app/helpers/sessions_helper.rb
module SessionsHelper
.
.
.
# 記憶トークンcookieに対応するユーザーを返す
def current_user
if (user_id = session[:user_id])
# ログイン中のidを代入する
# 永続セッション(ログイン中)にするため
@current_user ||= User.find_by(id: user_id)
# カレントユーザーまたは検索結果があったものを代入する
elsif (user_id = cookies.signed[:user_id])
#
user = User.find_by(id: user_id)
# idでユーザーを探す
if user && user.authenticated?(cookies[:remember_token])
# ユーザーが有効であり、記憶トークンも認証されたら
log_in user
# ログインする
@current_user = user
# カレントユーザーに代入するかな
end
end
end
# 渡されたユーザーがカレントユーザーであればtrueを返す
def current_user?(user)
user && user == current_user
# 有効且つデータベースにあるか?
# trueを返す
end
.
.
.
end
最終的なcorrect_userの実装
app/controllers/users_controller.rb
class UsersController < ApplicationController
.
.
.
# 正しいユーザーかどうか確認
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
# データベースと照らし合わせて無かったらホーム画面にいく。
end
end
演習
何故editアクションとupdateアクションを両方とも保護する必要があるのでしょうか? 考えてみてください。
ユーザーでは無い人が書き換えることができるから
2.
上記のアクションのうち、どちらがブラウザで簡単にテストできるアクションでしょうか?
GETメソッドのeditの方がURLを打ち込んでアクセスするのみだから editアクションらしい。