我需要通过ajax从任何页面创建auth。如果我发送错误的登录和空传递(反之亦然) - 将返回json错误(它没问题)。如果我发错了登录和错误的通行证(或正确的登录和路径) - 将返回重定向。
如何更改后端获取响应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\AuthController@postLogin');
答案 0 :(得分: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;
});
答案 1 :(得分:0)
我确信这个问题有更好的解决方案,但我所做的是:
Route::post('/login', 'Auth\AuthController@signIn');
在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);
}
和
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);
在新登录方法中。