2016-08-29 45 views
1

問題があります。私は通常のフォームと1つのajaxで処理されたフォームの2つのフォームを持っています。通常のフォームは必要に応じて動作しますが、サーバー側の認証が落ちた場合でもAjaxフォームは成功します。laravel認証が失敗したときにAjaxが成功する

マイloginHandler機能は、私のAjaxのコードは、私は私の通常の非Ajaxフォームと同じ動作をしたいと思い、この

$('#login-nav').validate({ 
    rules : { 
     email : { 
      required : true, 
      email : true 
     }, 
     password : { 
      required : true 
     } 
    }, 
    messages : { 
     email : { 
      required : '<div class="alert-danger alert-validation">Email is a required field.</div>', 
      email : '<div class="alert-danger alert-validation">Please enter a valid Email.</div>' 
     }, 
     password : { 
      required : '<div class="alert-danger alert-validation">Password is a required field.</div>' 
     } 
    }, 
    submitHandler: function (form){ 
     $.ajax({ 
      headers: { 
       'X-CSRF-TOKEN': $('meta[name="_token"]').attr('value') 
      }, 
      type: $(form).attr('method'), 
      url: $(form).attr('action'), 
      data: $(form).serialize(), 
      dataType: 'json', 
      success: function (data) { 
       var html = '<div class="alert alert-success">Login Successful</div>'; 
       $('#loginMsg').html(html); 
       return window.location = '/'; 
      }, 
      error: function (data) { 
       var html = '<div class="alert alert-danger">Email/Password is invalid</div>'; 
       $('#loginMsg').html(html); 
      } 
     }); 

     return false; 
    } 

ある

public function handleLogin(Request $request) { 

    // init auth boolean to false 
    $auth = false; 

    // run validation rules 
    $validator = User::validation($request->all(), User::$login_validation_rules, User::$login_error_messages); 

    // get credentials 
    $credentials = $request->only('email','password'); 

    if($validator->fails()) { 
     return back() 
      ->withErrors($validator) 
      ->withInput(); 
    } 

    $credentials = array_merge($credentials,['activated' => 1]); 

    // get remember from request 
    $remember = $request->has('remember'); 


    if (\Auth::attempt($credentials, $remember)) { 
     $auth = true; 
    } 

    if($request->ajax()) { 
     $response = response()->json([ 
      'auth' => $auth, 
      'intended' => \URL::route('home') 
     ]); 

     return $response; 
    } 

    return redirect()->intended('/'); 

} 

を下回っています。私のAjaxでエラーになるのではなく、成功に向かいます。どんな助けでも大歓迎です。

+0

「Ajax Succes」メソッドでどのようなAjaxレスポンスが得られていますか? – Qazi

答えて

1

Auth::attemptが返されます.2番目のパラメータを指定しないでresponse()->json()を返すと、デフォルトで200(成功)になります。したがって、Auth::attemptに基づいて、ログインに失敗した場合は400を返す必要があります。そうすれば、あなたのajaxのエラー関数に入るはずです。

$auth = \Auth::attempt($credentials, $remember); 

if($request->ajax()) { 
    $responseCode = 200; 
    if(! $auth) { 
     $responseCode = 400; 
    } 
    $response = response()->json([ 
     'auth' => $auth, 
     'intended' => \URL::route('home') 
    ], $responseCode); 

    return $response; 
} 
関連する問題