【CakePHP4】Authenticationプラグインでハマったこと①

【CakePHP4】Authenticationプラグインでハマったこと① CakePHP4

CakePHP4.xでログイン機能を実装することになり、Cookbookに従って”Authenticationプラグイン”を導入することにした。

なお、3.xで使用していた”AuthComponent”はすでに非推奨となっていた。

◼️CakePHP3.10 Cookbook_AuthComponent
https://book.cakephp.org/3/ja/controllers/components/authentication.html

手順は、「シンプルな認証と認可のアプリケーション」ページを参考にした。

◼️CakePHP4.x Cookbook_シンプルな認証と認可のアプリケーション
https://book.cakephp.org/4/ja/tutorials-and-examples/blog-auth-example/auth.html

ログイン機能の動作確認時、以下のエラーでハマった。

debug: Authentication\Authenticator\Result::__set_state(array(
'_status' => 'FAILURE_OTHER',
'_data' => NULL,
'_errors' =>
array (
0 => 'Login URL `/` did not match `/staffs/login`.',
),

“Login URL did not match”で調べていたところ、src/Application.php内の以下の記述がよろしくなかった模様。

    // メールとパスワードを選択するためのフォームデータチェックの設定
    $authenticationService->loadAuthenticator('Authentication.Form', [
        'fields' => [
            'username' => 'email',
            'password' => 'password',
        ],
//        'loginUrl' => '/users/login',
        'loginUrl' => Router::url('/users/login'),
    ]);

同様に、”unauthenticatedRedirect”も”Router::url()”で指定するようにする。

    $authenticationService = new AuthenticationService([
//        'unauthenticatedRedirect' => '/users/login',
                'unauthenticatedRedirect' => Router::url('/users/login'),
        'queryParam' => 'redirect',
    ]);

なお、「CMS チュートリアル – 認証」ページを見てみると、こちらはどちらも”Router::url()”を使用した記述となっていた。

◼️CakePHP4.x Cookbook_CMS チュートリアル – 認証
https://book.cakephp.org/4/ja/tutorials-and-examples/cms/authentication.html

最後に、上記エラーをよく見るとusersとは別にstaffsを用意しているのが見えるが、これについてまた次回の記事で取り上げたい。