creonメモ

コーディングやデザインの作業メモなど

【CakePHP3.6】ログイン後の遷移先設定

f:id:iriarj:20200122092743p:plain
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