Tymon\JWTAuth::toUser error: A token is required

Tymon\JWTAuth::toUser error: A token is required

我有一个 Larvel API,它使用 Tymon\JWTAuth 来验证用户。

它工作正常。

出于某些原因,我在 web.php 中也有一条 non-guarded 路线:

Route::get('myroute', 'MyController@mymethod');

MyController@mymethod 的代码如下:

$user = JWTAuth::toUser($request->input('token'));

// I tried also this:
// JWTAuth::setToken($request->input('token'));
// $user = JWTAuth::authenticate();

我在浏览器中使用 url 调用路由:/myroute?token=eyJ0eXAiOiJKV1QiLCJhbGci....

问题是我在 JWT.php 中有一个例外:

Tymon \ JWTAuth \ Exceptions \ JWTException A token is required

JWT.php

protected function requireToken()
{
    if (! $this->token) {
        throw new JWTException('A token is required');
    }
}

如何解码作为 URL 参数传递但不在请求的 header 中的令牌?

我用这段代码解决了它:

use Namshi\JOSE\SimpleJWS;

$secret = config('jwt.secret');
$jws = SimpleJWS::load($token);
if (!$jws->isValid($secret)) {
   return response()->json([], 401); // unauthorized
} 
$payload = $jws->getPayload();

不过我更愿意直接使用 JWTAuth

而不是

$user = JWTAuth::toUser($request->input('token'));

使用

$user = $this->jwt->User();

如果你使用的是jwt-auth dev,旧版本的toUser方法会报错如上,试试这个:

// Get the currently authenticated user
$user = auth()->user();

如果用户未通过身份验证,则返回 null。