2015-09-03 33 views
-1

我需要在任何页面上通过ajax创建auth。如果我发送错误的登录和空传递(反之亦然) - 将返回json错误(没关系)。如果我发送错误的登录和错误的传递(或正确的登录和路径) - 将返回重定向。laravel 5 ajax验证

如何更改后端获取响应json呢?

我的前端代码JS:

$("#authform").submit(function(e) { 
    e.preventDefault(); 

    $.post($(this).attr("action"), $(this).serialize(), function(data) { 
     console.log(data); 
    }, "json"); 
}); 

HTML:

<form id="authform" method="POST" action="{{ url('/auth/login') }}"> 
    <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
    <input type="email" name="email" value="{{ old('email') }}"> 
    <input type="password" name="password"> 
    <input type="checkbox" name="remember"> 
    <button type="submit">Login</button> 
</form> 

routes.php文件:

Route::post('auth/login', 'Auth\[email protected]'); 
+0

首先发布您的示例代码。所以,我们可以轻松帮助... –

+0

添加。也许有阿贾克斯认证的例子?我没有找到 –

+0

在你的控制器中使用'response() - > json(['data':'test']);'。它将以json格式向客户端发送响应。 – Iamzozo

回答

0

这不是一个答案。第一次尝试这种话就要

$('#authform').on('submit',function(e) { 
e.preventDefault(); 
$.ajax({ 
    type: 'POST', 
    cache: false, 
    dataType: 'JSON', 
    url: $(#authform).attr("action"), 
    data: $('#authform').serialize(), 
    success: function(data) { 
     console.log(data); 
    }, 
}); 
return false; 
}); 

而且你试过此链接How to create AJAX login with Laravel

0

我敢肯定有这个问题更好的解决办法,但我所做的就是:

  1. 创建在 Route::post('/login', 'Auth\[email protected]');
  2. 用于登录电子一条新的路线在App\Http\Controllers\Auth\AuthController我添加了两个新的方法:

    public function signIn(Request $request) { 
        $this->validateLogin($request); 
    
        $throttles = $this->isUsingThrottlesLoginsTrait(); 
    
        if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) { 
         $this->fireLockoutEvent($request); 
    
         return $this->sendLockoutResponse($request); 
        } 
    
        $credentials = $this->getCredentials($request); 
    
        if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) { 
         return $this->handleUserWasAuthenticated($request, $throttles); 
        } 
    
        if ($throttles && ! $lockedOut) { 
         $this->incrementLoginAttempts($request); 
        } 
    
        return $this->sendFailedLoginResponseJSON($request); 
    } 
    

AND

protected function sendFailedLoginResponseJSON(Request $request) 
    { 
     return response()->json(['username' => $this->getFailedLoginMessage()], 422); 
    } 

它基本上与从AuthenticatesAndRegistersUsers性状的登录方法,除了最后一行,登录方法使用

protected function sendFailedLoginResponse(Request $request) 
{ 
    return redirect()->back() 
     ->withInput($request->only($this->loginUsername(), 'remember')) 
     ->withErrors([ 
      $this->loginUsername() => $this->getFailedLoginMessage(), 
     ]); 
} 

其发送回重定向错误。

如果你想同时Ajax和非Ajax,你可以在方法的新标志做

 if($request->ajax()){ 
      return $this->sendFailedLoginResponseJSON($request); 
     } 
     return $this->sendFailedLoginResponse($request);