San*_*etR 0 php authentication laravel-5.3
我想在Laravel 5.3 LoginController中修改响应消息。到目前为止,当我尝试登录时,它会将我重定向到登录页面,并在顶部显示消息。
但是我要使用ajax通知来显示消息,而不是它。如何修改LoginController中的响应逻辑?
我当前正在使用的ajax调用的示例代码
$.ajax({
data: data,
url: 'http://mywebsite.com/login',
success:function(response){
console.log(response);
}
});
Run Code Online (Sandbox Code Playgroud)
PS-我是Laravel的新手,这是我第一个使用该框架的应用
一种方法是从特征中覆盖sendLoginResponse()和sendFailedLoginResponse()方法,AuthenticatesUsers以便您可以检查请求是否是ajax(或想要json)。
在您Auth/LoginController添加:
/**
* Send the response after the user was authenticated.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
protected function sendLoginResponse(Request $request)
{
$request->session()->regenerate();
$this->clearLoginAttempts($request);
if ($request->ajax() || $request->wantsJson()) {
return response()->json([
'user' => $this->guard()->user(),
]);
}
return $this->authenticated($request, $this->guard()->user())
?: redirect()->intended($this->redirectPath());
}
/**
* Get the failed login response instance.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
protected function sendFailedLoginResponse(Request $request)
{
if ($request->ajax() || $request->wantsJson()) {
return response()->json([
$this->username() => Lang::get('auth.failed'),
], 422);
}
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))
->withErrors([
$this->username() => Lang::get('auth.failed'),
]);
}
Run Code Online (Sandbox Code Playgroud)
这样可以使您routes的项目保持不变。
另外,如果添加dataType: 'json'它,则应为您解析响应,即:
$.ajax({
data: data,
url: 'http://mywebsite.com/login',
dataType: 'json',
method: 'post',
success:function(response){
console.log('success', response);
},
error: function () {
console.log('error', response)
}
});
Run Code Online (Sandbox Code Playgroud)
希望有帮助!