当前位置: 首页 > 知识库问答 >
问题:

Tymon\JWTAuth::用户错误:需要令牌

颜修为
2023-03-14

我有一个Larvel API,它使用Tymon\JWTAuth对用户进行身份验证。

它工作得很好。

出于某些原因,我在web.php中还有一个非防护路由:

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需要令牌

jwt. php

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

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

共有3个答案

孔鸿云
2023-03-14

我用这个代码解决了它:

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

东郭承业
2023-03-14

而不是

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

使用

$user = $this->jwt->User();
方心思
2023-03-14

如果您使用的是jwt auth dev,旧版本中的toUser方法将删除上述错误,请尝试以下操作:

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

如果用户没有经过身份验证,则返回null。

 类似资料: