Laravel 5.3修改LoginController响应

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的新手,这是我第一个使用该框架的应用

Rwd*_*Rwd 5

一种方法是从特征中覆盖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)

希望有帮助!