第10章ユーザーの更新・表示・削除
10.1 ユーザーを更新する
- ユーザー名やメールアドレスを編集するときに、毎回パスワードを入力しなくて良い仕様にする。
- パスワードがnilでも更新できるように、userモデルのバリデーションを追加する必要がある。
validates :password, presence: true, length: { minimum: 6 }, allow_nil: true
- allow_nil: trueの追加したとしても、has_secure_passwordによって、新規ユーザ登録時に存在性の検証が行われる(もともとhas_secure_passwordとpresence: trueという存在性を検証する2つのバリデーションが存在していた)
10.2 認可
- 認証=サイトのユーザーを識別すること
- 認可=ユーザーが実行可能な操作を管理すること
- 第8章で認証の機能は構築したが、認可の機能は未実装
⇨どのユーザでもあらゆるアクションにアクセスできる。URLを直接編集し、別のユーザの設定変更が可能となっている - ユーザーにログインを要求し、かつ自分以外のユーザー情報を変更できないように制御する
- 具体的には、before_action(何らかの処理が実行される直前に特定のメソッドを実行する)に以下のlogged_in_userメソッドを追加する。
app/controllers/users_controller.rb
# ログイン済みユーザーかどうか確認
def logged_in_user
unless logged_in?
flash[:danger] = "Please log in."
redirect_to login_url
end
end
end