Laravel Airlock如何对未经验证的web和api请求返回不同的响应

Laravel Airlock如何对未经验证的web和api请求返回不同的响应,laravel,laravel-7,laravel-airlock,Laravel,Laravel 7,Laravel Airlock,我正在用laravel+react native开发一个移动应用程序和网站 当您使用“auth:airlock”中间件向路由发送请求时,如果您传递了错误的承载令牌,它会将您重定向到/login页面。我想返回响应(“未经验证”,403)。但是,同时我希望继续将未经身份验证的用户重定向到我的web用户的/login页面 因此,我想实现: 当未经验证的web用户尝试浏览:domain.com/settings时,他将重定向到domain.com/login页面 当一个请求到达domain.com/a

我正在用laravel+react native开发一个移动应用程序和网站

当您使用“auth:airlock”中间件向路由发送请求时,如果您传递了错误的承载令牌,它会将您重定向到/login页面。我想返回响应(“未经验证”,403)。但是,同时我希望继续将未经身份验证的用户重定向到我的web用户的/login页面

因此,我想实现:

  • 当未经验证的web用户尝试浏览:domain.com/settings时,他将重定向到domain.com/login页面

  • 当一个请求到达domain.com/api/settings时,如果请求没有承载令牌或有错误的承载令牌,响应将是json

解决方案是:

api.php中的新路由:

Route::get(“/unauthenticated”,函数(Request$Request){
返回响应(“未经验证”,403);
})->名称(“未经认证”);
在Authenticate.php中间件中编辑:

受保护函数重定向到($request)
{
如果(!$request->expectsJson()){
如果($request->is(“api/*”){
返回路线(“未经验证”);
}
返回路线(“登录”);
}
}

我想说,最干净的解决方案是将请求作为(“应用程序/json”)从React本机发送。 在这种情况下,Laravel将确定这是一个API调用,并且不会重定向到
route(“login”)

以下是
App\Http\Middleware\Authenticate
的摘录:

/**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }