在通过ajax进行未经身份验证的json响应后,重定向到laravel中的先前预期页面

时间:2018-06-17 12:22:13

标签: ajax laravel authentication redirect exception-handling

我正在使用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'));
    }
}

我该如何解决这个问题?

2 个答案:

答案 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'));
    }
}