Cakephp PHP WEB開発

【Cakephp4】ログイン後のリダイレクト先を動的に変更する

※本サイトはPR表記を含みます。


ログインが必要な画面に直接アクセスすると、ログイン画面へリダイレクトされる動作はよくあります。
そこからログインした際、直接アクセスしようとした先にリダイレクトされれば便利ですよね(デフォルトのログイン後リダイレクト先はホームとして)

以下、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

-Cakephp, PHP, WEB開発
-