ログインが必要な画面に直接アクセスすると、ログイン画面へリダイレクトされる動作はよくあります。
そこからログインした際、直接アクセスしようとした先にリダイレクトされれば便利ですよね(デフォルトのログイン後リダイレクト先はホームとして)
以下、Cake4での実装方法です。
■ ログインが必要な画面へ直接URLでアクセスする
ログインが必要な画面へ直接URLを叩くと、以下のような形でログイン画面へリダイレクトされると思います。
例えば、https://ドメイン名/users というログインが必須な画面へアクセスすると、Cakephp4では以下のようにGETパラメータが付与され、ログイン画面へリダイレクトされます。
// リダイレクトされた後、GETパラメーターにredirectが付与される /login?redirect=%2Fusers
■ View側
AuthComponent::QUERY_STRING_REDIRECT は redirect というクエリ文字列キーが定義されているのでそれを軸にします。
https://api.cakephp.org/4.2/class-Cake.Controller.Component.AuthComponent.html#QUERY_STRING_REDIRECT
$redirect = \Cake\Controller\Component\AuthComponent::QUERY_STRING_REDIRECT; echo $this->Html->link('ログイン', ['controller' => 'Users', 'action' => 'login', '?' => [$redirect => $this->getRequest()->getQuery($redirect)]]);
■ Controller側
public function login() { $redirect = \Cake\Controller\Component\AuthComponent::QUERY_STRING_REDIRECT; // GETパラメータにリダイレクト情報があれば、それを利用。なければAuthで設定したリダイレクト先 $redirectUrl = empty($this->getRequest()->getQuery($redirect)) ? $this->Auth->redirectUrl() : $this->getRequest()->getQuery($redirect); // ログイン系の処理 // ログイン成功後、リダイレクト return $this->redirect($redirectUrl); }
別の方法として、ログインの部分をsubmitしてPOSTリクエストとして置き換えることも可能そうですね。
あと、元も子もない話ですけど、AuthComponentはCake4.0から非推奨です。
今後は、authorization pluginsを利用するようにとのことです。
https://api.cakephp.org/4.2/class-Cake.Controller.Component.AuthComponent.html