【问题标题】:JWT_Auth returning a token is required for getPayload even though one is supplied即使提供了一个令牌,getPayload 也需要返回令牌的 JWT_Auth
【发布时间】:2018-12-21 07:15:03
【问题描述】:

我在我的 Laravel 5.6 项目中使用 JWT-Auth 包。

我有一个使用 getPayload 方法的简单测试,但它不断返回;

Tymon\JWTAuth\Exceptions\JWTException: A token is required

目前我的方法如下;

$user = factory(User::class)->create();

$token = JWTAuth::fromUser($user);
$payload = JWTAuth::getPayload($token);

如果我执行dd($token),它会正确吐出用户令牌。

如果有其他人遇到过这个问题,我希望能得到一些帮助。

干杯

【问题讨论】:

  • 如果你把它称为$payload = JWTAuth::parseToken()->getPayload(); 会发生什么?
  • @NimeshkaSrimal 我得到以下信息; Tymon\JWTAuth\Exceptions\JWTException: The token could not be parsed from the request
  • $payload = JWTAuth::setToken($token)->getPayload(); 怎么样?
  • 哦,效果很好,我的测试现在正在运行...... parseToken 和 setToken 有什么区别?
  • 我查看了源代码,发现当您使用 fromUser() 方法创建令牌时,它没有为 $this->token 变量设置任何值。但是 getPayload() 方法检查是否设置了 $this->token。这就是它失败的原因。在调用 parseToken() 之前设置令牌时,它可以访问 $this->token。希望这是有道理的。

标签: php laravel laravel-5 jwt-auth


【解决方案1】:

在您的情况下,如果您将其称为:

$payload = JWTAuth::setToken($token)->getPayload();

我查看了源类,它看起来像是原因;

$payload = JWTAuth::getPayload($token);

返回A token is required 错误是因为它寻找$this->token 变量。但是当您使用JWTAuth::fromUser($user); 设置它时,它不会设置任何值。

public function fromUser(JWTSubject $user)
{
    return $this->fromSubject($user);
}

...

public function fromSubject(JWTSubject $subject)
{
    $payload = $this->makePayload($subject);
    return $this->manager->encode($payload)->get();
}

在这里你可以看到fromSubject()实际上返回了payload。所以fromUser() 的返回结果实际上应该包含您正在寻找的有效负载,尽管我不确定这一点,因为我无法测试。

希望对你有帮助:)

【讨论】:

  • 完美,就像一个魅力,非常感谢你的帮助
猜你喜欢
  • 2016-02-13
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 2018-11-21
  • 2017-05-08
  • 1970-01-01
相关资源
最近更新 更多