0

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

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

所以我想实现:

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

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

4

2 回答 2

0

解决方案是:

api.php 中的新路由:

Route::get("/unauthenticated", function(Request $request) {
    return response("Unauthenticated", 403);
})->name("unauthenticated");

在 Authenticate.php 中间件中编辑:

    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            if($request->is("api/*")) {
                return route("unauthenticated");
            }
            return route('login');
        }
    }
于 2020-03-15T12:25:10.713 回答
0

我想说最干净的解决方案是将 React Native 的请求作为(“application/json”)发送。在这种情况下,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');
        }
    }
于 2020-03-17T16:25:47.180 回答