2011-11-23 7 views
1

検索のようなWebアプリケーションでAJAXを使用していますが、ユーザーがログアウトしていると、リダイレクト(アクション '検索'からアクション 'ログイン' )が正しく処理されていません。CakePHP 2 AJAXリダイレクト

AJAX呼び出しでリダイレクトhapendが発生したときに正しいアクションをレンダリングするために、AppControllerのメソッド 'redirect'を再宣言することは可能ですか?

は、私はあなたの最善の策は、あなたが無効な応答に正しく応答するために呼び出すAJAXの設定になると思い、 セバスチャン・

答えて

2

、ありがとうございました。それはあなたのアプリの重要な部分であると思われるので、すべてのAjaxリクエストで 'loggedin'変数を渡すので、クライアントはユーザーがログアウトするとすぐにそれを知ることができます。あなたは、ユーザーがログインしておきたい場合には

アップデートは、あなたは、単にすべての要求を実行しますあなたのAppController::beforeFilter()のようなものでクッキーチェック/ログイン配置する必要があります。

public function beforeFilter() { 
    if($this->Auth->user() { 
      // USer is logged in, it's all gravy 
    } else { 
     // User is not logged in, try to log them in 
     $userData = $this->Cookie->read('User'); 
    if(!empty($userData)) { 
       // Function that grabs info from cookie and logs in user 
     } 
    } 
} 

このようにして、ユーザーがCookieを持っている限り、ログインするとリダイレクトされません。

public function my_ajax_method() { 

    if (!$this->Auth->user()) { 
     //user not authenticated 
     $result = "requires auth"; 
    } 
    else { 
     // use is authenticated 
     // do stuff 
     $result = 'result of stuff'; 
    } 

    $this->set(compact('result')); 

} 

あなたは結果をチェックする必要があります。方法自体に認証され

public function beforeFilter() { 
    $this->Auth->allow(array('my_ajax_method')); 
} 

し、ユーザーを確認します

+0

しかし、私はユーザーが自分自身に再接続する必要はありません、私はクッキー情報を持つ自動ログイン機能を持っています。私は、AJAX呼び出しが行われたときに、そのCakePHPがログインしているかどうかをチェックし、もしそうでなければhifを自動再接続したい。 –

+1

@Sébastienは私の更新を見ます。 – Dunhamzzz

+0

よろしくお願いいたします。しかし、「ログインしていないユーザ」が公開ページにあり、ログインが必要なAJAXイベントを発生させる場合、このメソッドのログページへのリダイレクトがあります(非AJAX呼び出し)。したがって、AJAXの戻り値は空になります(エラーはありません)。メソッドを壊さずに、ログインページをAJAX呼び出しに戻すための「擬似リダイレクト」を行う方法を教えてください。 –

0

別のアプローチは、Ajax機能に誰もアクセスできるようになりますあなたのjavascriptのajax呼び出しのそれに応じて行動します。

+0

私のAJAXメソッドの多くは、 "$ this-> request-> is( 'Ajax')"の条件で "標準"メソッドであるため、これは不可能です。 –