【CakePHP】手動で元のページへリダイレクトする
【環境】
【困ったところ】
通常のAuthコンポーネントを使っている場合、ログイン・ログアウト後に元のページへもどるのは簡単です。
$this->redirect($this->Auth->redirect());
OAuthの場合でも、ログアウトの場合は簡単です。
問題はログインです。
$this->redirect($this->referer());
一度、外部の『http://twitter.com/oauth/authorize』へ飛んでしまうので、
リファラを手繰って戻ることはできません。
【解決策】
ログイン用のアクションへ飛ぶ際に、『$this->here』を使って現在のページのパス部分を渡します。
渡された先では、『$this->here』の中身はスラッシュによって
【ビュー】
echo $html->link('Twitterでログイン', "/twitter/login/{$this->here}");//$this-hereの中身は"/localhost/controller/action"など。
それぞれひとつの引数として分割されるので、コントローラ以下を
再びつなげます。
【コントローラ】
function login(){
//『func_get_args()』を使って、アクション以下のパラメータが
//いくつ連なっても対応できるようにする。
$arr_arg = func_get_args();
$redirect = '';//リダイレクトがトップページの場合
if(count($arr_arg) == 1) $redirect = '../';//最初のパラメータ("localhost"など)は省く。
for($i=1; $i//もう一度つなげる
}//セッションに記録する
$this->Session->write('redirect_url', $redirect);
...
}//Twitterから戻ってきて実行されるアクション
function callback(){
...
$redirect = ($this->Session->read('redirect_url'))
? $this->Session->read('redirect_url')
: 'hoge/index';
$this->redirect($redirect);
}