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

wkftcu5l  于 2022-12-05  发布在  其他
关注(0)|答案(3)|浏览(143)

我有一个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参数传递而不是在请求标头中的令牌进行解码?

qojgxg4l

qojgxg4l1#

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

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

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

mqxuamgl

mqxuamgl2#

代替

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

用途

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

ki0zmccv3#

我用下面的代码解决了这个问题:

use Namshi\JOSE\SimpleJWS;

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

但是,我更愿意直接使用JWTAuth

相关问题