紙一重の積み重ねスマートフォン用の表示で見る紙一重の積み重ねアラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。認可の演習まとめ&解答例です。個人の解答例なので、誤りがあればご指摘ください。そのユーザーが実行可能な操作を管理すること現在の実装の課題1未ログイン状態であっても、ユーザ情報編集画面にアクセスすることができてしまう。未ログイン状態でサイトを表示する。打ち込んでアクセスすると、IDが1番のユーザ情報変更画面が表示されてしまう。現在の実装の課題2ログイン状態であれば、他のユーザーの情報が見えてしまう。他のユーザーの情報を更新することも可能。IDが1番のユーザでログインする。書き換えてアクセスすると、IDが2番のユーザ情報変更画面が表示されてしまう。ユーザーにログインを要求する本章での学び【controller】beforeフィルターbefore_actionメソッドを使って、Usersコントローラ内の処理が実行される前に、ログイン画面に転送する仕組みを実現する。未ログイン状態でサイトにアクセスする。打ち込んでアクセスすると、IDが1番のユーザ情報変更画面ではなく、ログイン画面が表示されるようになる。テストコードの修正before_actionにて、editアクションや、updateアクション実行前にログインが必要になったため、テストコードを修正する。log_in_asヘルパーを使用して、テストコード内でログイン状態にする。テストを実行するとgreenになってしまう。:update]テスト結果がgreenになってしまう。skips原因は、UsersControllerTestの中で、editアクションとupdateアクションを呼び出していないため。endend上記のテストコードに、editアクションとupdateアクションの処理を追加する。再度、before_actionを有効にしてテストコードを実行する。:update]テスト結果がgreenになることを確認。skips演習1デフォルトのbeforeフィルターは、すべてのアクションに対して制限を加えます。(結果としてテストも失敗するはずです)。only:オプションをコメントアウトする。:logged_in_userテスト結果がredになることを確認。skipsなお、すべてのアクションの実行前に必ずログイン要求を行うようになる。up」ボタンをクリックする。ユーザー登録画面ではなく、ログイン画面が表示されてしまう。以下の仕様でテストコードを作成する。fixtureに2人目のユーザー「archer」を追加するテストコードの修正setupメソッドにて、2人目のユーザーをインスタンス変数@other_userに代入log_in_as(@other_user)として、2人目のユーザー「archer」でログインしておくその後、1人目のユーザー「michael」のユーザ情報変更画面や、ユーザ情報更新を行うflashが空であることを確認するroot_urlにリダイレクトさせる【controller】beforeフィルターの修正beforeフィルターから呼び出される、correct_userメソッドを追加する。取得した@userと、現在のログイン中のユーザ情報を比較する(sessions_helper.rbで定義したcurrent_userを呼び出す)一致していない場合は、root_urlにリダイレクトさせる。current_userend【helper】と【controller】のリファクタリングSessionsヘルパー内に、current_user?という論理値を返すメソッドを作成する。current_user以下のようにリファクタリングする。2日ほど大ハマリしました。