我正在使用AJAX请求来处理我的应用程序中的一些crud操作。在某些情况下,当用户提交需要身份验证的AJAX请求时,可能会出现用户未经身份验证的情况。现在,在这种情况下,我将通过处理从服务器发送的401状态代码,使用JavaScript将用户重定向到登录页面。但是,我还希望将用户重定向到用户重定向的上一页。为此,我在下面给出的app\Exceptions\Handler
类中尝试了此代码:
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()){
$request->session()->put('url.intended', $request->session()->get('_previous.old') );
return response()->json(['message' => $exception->getMessage()] , 401);
}
else{
return redirect()->guest(route('login'));
}
}
我该如何解决这个问题?
答案 0 :(得分:0)
由于您在此部分使用ajax调用laravel web http响应:
return redirect()->guest(route('login'));
将正确重定向并加载页面,但您的ajax响应将包含响应的html模板而不是url重定向。
要解决这个问题,请执行以下操作:
return response()->json(['redirect'=>['route'=>'/login'], 403);
在ajax部分检查403
响应,如果你得到一个403
,那么只需从上面的json抓住路线并执行:
windows.location.href=response.data.redirect.route;
答案 1 :(得分:0)
解决:
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()){
//put the intended URL into the session data so that the user will
//get redirected to the intended URL once after the user logs in
$request->session()->put('url.intended', url()->previous());
return response()->json(['message' => $exception->getMessage()] , 401);
}
else{
return redirect()->guest(route('login'));
}
}