ログインしていないユーザーには編集画面を表示しない
ユーザー編集機能を追加しました。メニューにあるユーザ編集へのリンクはログインしていないと表示しないようにしていますが、ブラウザのアドレス欄に直接ユーザー編集のURLを入力するとユーザー編集画面を表示できてしまいます。
出来ないように修正します。
出来ないように修正します。
以下、「Ruby on Rails Tutorial」の9章を参考に行います。
参考資料ページの6.参照
●設定方法
ユーザー編集は、Usersコントローラ内の"edit"アクション、"update"アクションで行っています。
beforeフィルターを使って、"edit"、"update"アクション実行時には、ログイン済みか確認する処理を行うように定義します。
●Usersコントローラにbeforeフィルター定義
$ vi app/controllers/users_controller.rb
・"sign_in?"は、Sessionsヘルパー内に定義されています。
・ログインしていない場合は、ログインページ(signin_path)にリダイレクトします。
・"redirect_to"メソッドには、"flash"にメッセージを割り当てることもでき、
redirect_to signin_path, notice: "ログインしてください。"
は、下記処理を簡便に記述できます。
flash[:notice] = "ログインしてください。"
redirect_to signin_path
・flashで設定したメッセージは、application.html.erb内で設定されていてブートストラップのレイアウトで表示されます。
●動作確認
ログインしていない状態では、ブラウザから直接URLを入力してもユーザー編集画面が表示されず、ログイン画面にリダイレクトされるようになりました。
参考資料ページの6.参照
●設定方法
ユーザー編集は、Usersコントローラ内の"edit"アクション、"update"アクションで行っています。
beforeフィルターを使って、"edit"、"update"アクション実行時には、ログイン済みか確認する処理を行うように定義します。
●Usersコントローラにbeforeフィルター定義
$ vi app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :signed_in_user, only: [:edit, :update]
private
# Before filters
def signed_in_user
redirect_to signin_path, notice: "ログインしてください。" unless signed_in?
end
end
・"sign_in?"は、Sessionsヘルパー内に定義されています。
・ログインしていない場合は、ログインページ(signin_path)にリダイレクトします。
・"redirect_to"メソッドには、"flash"にメッセージを割り当てることもでき、
redirect_to signin_path, notice: "ログインしてください。"
は、下記処理を簡便に記述できます。
flash[:notice] = "ログインしてください。"
redirect_to signin_path
・flashで設定したメッセージは、application.html.erb内で設定されていてブートストラップのレイアウトで表示されます。
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
●動作確認
ログインしていない状態では、ブラウザから直接URLを入力してもユーザー編集画面が表示されず、ログイン画面にリダイレクトされるようになりました。
| アプリ作成 | 08:03 | comments:0 | trackbacks:0 | TOP↑