Laravel API响应即使通过身份验证也未经身份验证

时间:2020-08-12 19:24:53

标签: laravel jwt laravel-7 laravel-authentication laravel-jwt

我在登录时使用jwt创建令牌。登录后,我尝试点击/ me api指向该函数:

     public function me()
        {
            $user = auth()->user();
            return response()->json($user);
        }

我遵循了JWT的官方文档,最初我能够获得API的响应。突然,它开始抛出一个

{
    "message": "Unauthenticated."
}

为什么会这样?有什么解决方法吗?如果有人可以帮助,那就太好了。

1 个答案:

答案 0 :(得分:1)

我尝试了文档设置并且工作正常,您可能会错过在api调用中传递身份验证标头的权限。由于idk是什么设置,我只能在登录时才能知道,因此您应该在具有身份验证的api调用中使用接收到的令牌。

PostMan软件:在标题选项卡中,添加一个密钥Authorization,并用Bearer为值分配令牌,例如Breaer token... ...

有关更多帮助,请阐明您如何尝试api调用。

编辑:添加了使用中间件的另一种方式

另一种实现或使用中间件的方式:

使用JWT名称创建一个中间件,并将下面的代码放在句柄函数中

Don't forget to import
use JWAuth;

public function handle($request, Closure $next)
{
    JWTAuth::parseToken()->authenticate();
    return $next($request);
}

然后在内核中将jwt像这样添加到$ routeMiddleware中:

protected $routeMiddleware = [
    // you should add below code.
    'jwt' => \App\Http\Middleware\JWT::class,
];

routes/api

Route::apiResource('/posts', 'PostController');

现在在PostController中,像这样将您的中间件添加到Constructor中。

public function __construct()
{
    $this->middleware('jwt', ['except' => ['index','show']]);
}

因此,在构造中,您将基于JWT设置middleware,然后使用except来修改哪些功能不需要基于JWT令牌进行身份验证。现在,当您使用auth()->user()时,您可以获得信息或其他信息。

因此,如果我在尝试index, show, update, delete, store, createGET METHOD使用url.com/posts来进行API调用时遇到了url.com/posts/23,则无需传递{{1} }令牌。

当您尝试使用JWT时,您应该意识到它是基于您传递的令牌而工作的,使用登录名时您会获得令牌,但是由于您没有获得用户信息,因此未获得用户信息将用户的令牌传递给应用,在进行所有这些操作之前,您应该考虑先验证令牌,然后再进行其余的逻辑操作。祝你好运。

编辑:添加了更多信息

auth.php

JWT