2011-12-23 12 views
0

私は、ユーザーが自分のアプリケーションにログインすることができます以下の方法があります。CakePHPの2.0のAjaxログイン

public function login() 
{ 
    if($this->Auth->user()) 
    { 
     $this->Session->setFlash(__('Already logged in...'), 'default', array(), 'auth'); 

     $this->redirect(array('controller'=>'pages','action'=>'display','home')); 
    } 

    if ($this->request->is('ajax')) 
    { 
     $this->layout = 'ajax'; 

     if ($this->Auth->login()) 
     { 

     } 
     else 
     { 

     } 
    } 
    else if ($this->request->is('post')) 
    { 
     if ($this->Auth->login()) 
     { 
      return $this->redirect($this->Auth->redirect()); 
     } 
     else 
     { 
      $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth'); 
     } 
    } 
} 

をこれは、ユーザーがPOSTリクエストを使用したり、AJAX要求のいずれかを介してログインすることができます。しかし、ajaxリクエストに関しては、JSONを使用して結果を戻す方法はありますか?たとえば、ユーザーが間違った詳細を入力した場合、エラーメッセージが返されます。

私はので、私はちょうどサーバーからのエラーメッセージを表示したり、からのリターンに基づいて、再びリダイレクトを行いますどちらかのリターンに対処するための成功の方法にいくつかの追加のロジックを実行する必要があり、セットアップすでにjQueryのAJAXを持っていますサーバ。

$('form').live('submit', function (event) { 

    // Declare the form 
    var form = $(this); 

    // Stop the form from doing a native postback 
    event.preventDefault(); 

    // Get the data from the form 
    var data = form.serialize(); 

    $.ajax({ 
     type: form.attr('method'), 
     url: form.attr('action'), 
     data: data, 
     success: function (responseHtml) { 

      // If correct login details 
      if(success){ 
       window.location.href('INSERT LOCATION TO REDIRECT TO FROM SERVER'); 
      } else {   
       alert('INSERT MESSAGE FROM THE SERVER'); 
      } 

     }, 
     error: function (jqXHR, textStatus, errorThrown) { 

       alert('Error!'); 

     } 

    }); 

}); 

誰でも手助けできますか?私はCakePHP 2.0を使用しています。ネット上やここで見たチュートリアルは、すべて私が達成しようとしているもののために時代遅れになっています。

答えて

0

編集:あなたはjQuery.getJSONを使用してJSON値を処理するために、あなたのjavascriptを変更する必要があり、次のPHPコードはJavaScript側の

if ($this->Auth->login()) 
    { 
     $arr = array("login" => "true" , "redirect" => "/redirect_url"); 
     echo json_encode($arr); 
    } 
    else 
    { 
     $arr = array("login" => "false" , "error" => "Invalid Login Credentials"); 
     echo json_encode($arr); 
    } 

を使用する必要があります。 jQuery.getJSONの例はここにhttp://api.jquery.com/jQuery.getJSON/

使用は非常に柔軟ではありません、このjQueryのコード

<script type="text/javascript"> 


    $.getJSON("login.php", function(data) { 
        if(data.login) 
        { 
         //redirect user with data.redirect 
        } 
        else 
        { 
         //display error with data.error 
        } 
    }) 


</script> 
+0

空くされ、それがリダイレクトリンクをバック渡していません。そのため、JSONを使用して複数の変数を渡すことができた理由を教えてください。 – Cameron

+0

あなたはPHPで配列を使用してjson_encode($ array)を使って配列をjson –

+0

に変換することができます。 JavaScriptの成功の呼び出しでこれを使用して、エラーであるかどうかを判断し、関連するアクションを実行する方法について説明します。 – Cameron