##やりたいこと
ajaxでサーバにPOST(GET)して、結果によっては別ページにジャンプさせたい。
※そもそもやりたいこと
ajaxでサーバにPOSTしたときにAuthのセッション切れだったら、ログインページに飛ばしたい。
##実装
ajaxでは大本のページをリダイレクトさせることはできないので、サーバ側ではフラグと遷移先URLを返して、クライアント側ではフラグを評価してジャンプが必要な場合は遷移先URLへジャンプする。
クライアント側
$.ajax({
url:'isLoggedIn',
type:'get',
dataType:'json'
}).done(function(data){
//ジャンプが必要かのチェック
if(!data.isLoggedIn){
location.href = data.url;
}
})
サーバ側(CakePHP)
public function isLoggedIn(){
$user = $this->Auth->user();
//ユーザがログイン中かのチェック
if(empty($user)){
//ログイン中でない場合
$res = [
'isLoggedIn'=>false,
'url'=> 'http://foo/bar/Users/login'
];
}else{
//ログイン中の場合
$res = [
'isLoggedIn'=>true,
];
}
$this->viewClass = 'json';
$this->set(compact('res'));
$this->set('_serialize','res');
}
ちなみに、チェック用のメソッドはAuthから外しておく。
Authの外し方
$this->Auth->allow(isLoggedIn);