CakePHP3で、ログイン後のURLを指定する場合、
Authコンポーネントを使って以下のように書きますね。
src/Controller/AppController.php
public function initialize()
{
parent::initialize();
$this->loadComponent('Auth', [
'authorize' => 'Controller',
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
'password' => 'password'
]
]
],
'unauthorizedRedirect' => [
'controller' => 'Users',
'action' => 'login'
],
'loginRedirect' => [
'controller' => 'Articles',
'action' => 'index'
],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'login'
],
'authError' => __('You need Logged In.')
]);
}
この記述だと、未ログイン状態で例えば
http://sample.com/comments
にアクセスすると
http://sample.com/users/login
にリダイレクトされて、ログインに成功すると
http://sample.com/comments
に戻されます。
アクセスしようとしたURLに戻してくれるので便利といえば便利なのですが、ログイン後のURLを固定したい場合もあるでしょう。
固定したい場合は、sessionからAuth.redirectを消します。
src/Controller/UsersController.php
public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
$this->Flash->success(__('Log In Success.'));
$this->request->session()->delete('Auth.redirect');
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password, try again'));
}
}
これで、実現できました。