BETA

ログイン後のリダイレクト先を手動設定(CakePHP2)

投稿日:2018-12-02
最終更新:2018-12-26

Auth認証がかかっているページへ飛んだ際、ログイン後そのページへ戻ることが可能。(Cakeの方でデフォルトで機能している)

今回は、ログインしていないと閲覧できない内容がある等、手動でログイン後のリダイレクトページを指定する必要がある時の設定方法について記述する。

設定方法

Contoroller側で以下のように記載

$this->Session->write('Auth.redirect', $redirect_url);  

Auth.redirectはログイン後のリダイレクト先のこと。ログイン後自動でnullに上書きされる。
これを設定することにより、ログイン後飛ばしたいアドレスを手動で設定できる。

$redirect_urlは普通にリンクアドレス(例:/index, /user/dashboard等)

私の場合、無闇矢鱈にSessionを上書きされると困るので、ログインユーザーがいない時のみ保存処理を走らせている。

if(!$this->Auth->user()) {  
    $this->Session->write('Auth.redirect', $redirect_url);  
}  

リダイレクトの仕組み

cake/lib/Cake/Controller/Component/AuthComponent.php 735行目

public function redirectUrl($url = null) {  
  if ($url !== null) {  
    $redir = $url;  
    $this->Session->write('Auth.redirect', $redir);  
  } elseif ($this->Session->check('Auth.redirect')) {  
    $redir = $this->Session->read('Auth.redirect');  
    $this->Session->delete('Auth.redirect');  

    if (Router::normalize($redir) === Router::normalize($this->loginAction)) {  
      $redir = $this->loginRedirect;  
    }  
  } elseif ($this->loginRedirect) {  
    $redir = $this->loginRedirect;  
  } else {  
    $redir = '/';  
  }  
  if (is_array($redir)) {  
    return Router::url($redir + array('base' => false));  
  }  
  return $redir;  
}  

以下でリダイレクト先のURLを確認することが可能

$this->Auth->redirect()  
$this->Session->read('Auth.redirect')  

要はSessionを利用しているだけなので、その辺りを詳しく調べたい場合はSessionの仕組みを確認すると良い。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@tanakashiの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!