CakePHP4 ,難解すぎて脳がとろけそうです。ババロアです。Kyosukeです。
Cake4 ID/パスワードでログインさせたい
Cake2ではAuthコンポーネントを使っていましたが…、Cake3/4はプラグインというカタチが推奨されるようになっているようで、チュートリアルを参考に
https://book.cakephp.org/4/en/tutorials-and-examples/cms/authentication.html
順番にやっていけばいいのですが、あちこちに色々書き加えないといけなくて頭が沸いてきます。沸いたり溶けたり大変です。プリンです。Kyosukeです。
未ログイン時のリダイレクト先指定でつまづいた
弊社での開発時には、http://testserver/●●●/ みたいな感じで サブディレクトリ内で開発しています。
通常、Cake中のビューやコントローラ上なら、
$this->Url->build(‘/users/list’);
のように ‘/’ を起点に指定すると→ /testserver/●●●/users/list のように設置ディレクトリも考慮したカタチで展開してくれるのですが…
チュートリアルどおりに進めると、/●●●/users/login に飛んでくれない
‘unauthenticatedRedirect’ 内で いつも通りに ‘/users/login’ と書くと
// 未ログイン時は /testserver/●●●/users/login に飛んでほしい
$authenticationService = new AuthenticationService([
'unauthenticatedRedirect' => '/users/login',
// testserver/users/login になってしまう↑(>_<)
'queryParam' => 'redirect',
]);
このままでは、開発サーバのルートに飛んでしまい、ログインページが表示されません。
ちょっと探したら同じ状況の質問が見つかったので
https://stackoverflow.com/questions/60053397/cakephp-4-cakephp-route-url-missing-route
回避策:
Router::url を使えば思惑通りに展開されるようです
//Routerを使うよ
use Cake\Routing\Router;
$authenticationService = new AuthenticationService([
//コレはズレる
// 'unauthenticatedRedirect' => '/users/login',
//Router::urlを使う
'unauthenticatedRedirect' => Router::url(['controller' => 'Users', 'action' => 'login']),
//または
'unauthenticatedRedirect' => Router::url('/users/login'),
'queryParam' => 'redirect',
]);
→ https://testserver/●●●/users/login にちゃんとリダイレクトされました(>_<)
Cake4、思い通りに動かすにはまだまだ道が長そうです、ココロ折れそうですが(>_<)誰かやさしく教えて(´д`)