【CakePHP3.6】ログイン後の遷移先設定
自分用メモです。
ログインしたときに、元のページまたは指定のページに遷移させる方法。
UsersControllerのloginメソッドなどでも対応できますが、個人の好みとAuthコンポーネントの管理コストを考えるとこの書き方が便利だと思いました。 (ついでにログアウト後の遷移先も設定)
// src/Controller/AppController.php の中で namespace App\Controller; use Cake\Controller\Controller; class AppController extends Controller { public function initialize() { // 既存のコード $this->loadComponent('Auth', [ 'authenticate' => [ 'Form' => [ 'fields' => [ 'username' => 'email', 'password' => 'password' ] ] ], 'loginAction' => [ 'controller' => 'Users', 'action' => 'login' ], // ログイン後リダイレクト先 'loginRedirect' => [ 'controller' => 'Articles', 'action' => 'index' ], // ログアウト後リダイレクト先 'logoutRedirect' => [ 'controller' => 'Users', 'action' => 'login' ], // コントローラーで isAuthorized を使用します 'authorize' => ['Controller'], // 未認証の場合、直前のページに戻します 'unauthorizedRedirect' => $this->referer() ]); // display アクションを許可して、PagesController が引き続き // 動作するようにします。また、読み取り専用のアクションを有効にします。 $this->Auth->allow(['display', 'view', 'index']); } }
UsersControllerからでも出来なくはありませんが、↑の方がコードも簡潔なので特に事情がない限りはAppControllerのAuthコンポーネントでまとめると良いと思います。
loginメソッド内で設定する必要があるときは、公式チュートリアルのリダイレクトのところを設定します。
// src/Controller/UsersController.php の中で public function login() { if ($this->request->is('post')) { $user = $this->Auth->identify(); if ($user) { $this->Auth->setUser($user); // ↓これの引数を指定しても実装はできる return $this->redirect($this->Auth->redirectUrl()); } $this->Flash->error('ユーザー名またはパスワードが不正です。'); } }
参考にしたページ https://book.cakephp.org/3.0/ja/tutorials-and-examples/cms/authentication.html