【问题标题】:Laravel API authentication middlewareLaravel API 认证中间件
【发布时间】:2021-03-24 21:26:58
【问题描述】:

我在使用 Laravel 身份验证中间件时遇到了一些问题。 因为我希望这个中间件每次都运行,所以我创建了新的中间件并将其添加到 API 中的$middlewareGroups。 我的中间件如下所示:

if ($request->path() === 'api/auth/signin' OR 'api/canLogin' OR 'api/check') {
    return $next($request);
}
 elseif (!Auth::check()){
    return response()->json(['response' => false, 'status' => 403, 'message' => 'Not Authenticated'], 403);
}

奇怪的是第一次确实有效(我不知道如何),但现在没有了。它总是将我重定向到 public.html(因为我没有登录视图)。

我知道最简单的方法是将该中间件添加到每个受保护的路由中,但我希望它每次都运行。 无论如何,我的路由都使用 auth 中间件(比如 Route::group(['middleware' => ['auth:api']] ),如果我删除这个中间件,它会给我相同的 index.html

【问题讨论】:

  • 为什么你创建了一个新的中间件而不是使用 laravel one?

标签: php laravel


【解决方案1】:

OR 不是那样工作的。您的 IF 将始终返回 TRUE,因为它是一个非空字符串。 这将导致if (($request->path() === "string") OR (true) OR (true))

您可以改为使用in_array($request->path(), ["path1", "path2", "etc"])

【讨论】:

    【解决方案2】:

    不要使用中间件过度连接的默认未经身份验证的异常

    Exceptions/Handler.php 添加这行

    use Illuminate\Auth\AuthenticationException;
    
    
    
    
    protected function unauthenticated($request, AuthenticationException $exception)
    {
        return $request->expectsJson()
            ? response()->json(['response' => false, 'status' => 403, 'message' => 'Not Authenticated'], 403)
            : redirect('/login');
    }
    

    这是更好的处理方式

    【讨论】:

    • 也许,但我仍然有同样的反应
    猜你喜欢
    • 2016-04-27
    • 2020-07-25
    • 2017-12-30
    • 2017-06-27
    • 2020-11-09
    • 1970-01-01
    • 2017-10-05
    • 2015-11-05
    • 2019-03-01
    相关资源
    最近更新 更多