【问题标题】:JWT generating custom token "array given"JWT 生成自定义令牌“给定数组”
【发布时间】:2019-02-11 21:20:36
【问题描述】:

按照我正在尝试使用

生成自定义令牌的文档
$payload['user_id'] = $account->provider_user_id;
$token = JWTAuth::encode($payload);
return Response::json(compact('token'));

结果

传递给 Tymon\JWTAuth\Manager::encode() 的参数 1 必须是 Tymon\JWTAuth\Payload 的实例,给定数组

【问题讨论】:

    标签: php laravel jwt


    【解决方案1】:

    这有点老了,但经过一段时间的努力,我终于找到了解决方案。我在互联网上找到的大多数解决方案都说问题出在令牌的 exp 参数(到期日期)中的 jwt 配置文件中。

    这并没有解决大多数用户的问题,这是因为问题出在sub 参数中。

    大多数解决方案都类似于@Brenden 的解决方案,但您会在那里收到一个错误,即您没有通过正确的声明。像这样使用它会起作用:

    $payload = JWTFactory::sub('token')->data($tempToken)->make();
    

    $tempToken 是您的自定义字段数组。

    之后就可以简单了:

    $token = JWTAuth::encode($payload)->get(); // mind the ->get()
    
    return response()->json(compact('token'));
    

    【讨论】:

      【解决方案2】:

      也许这会让你更接近一点?

      $customClaims = array(
          'user_id' => $account->provider_user_id
      );
      $payload = JWTFactory::make($customClaims);
      $token = JWTAuth::encode($payload);
      

      另外,如果您使用 Laravel 的后端,您可以使用以下方法轻松获取任何控制器中当前登录的用户 ID:

      $user_id = \Auth::user()->id;
      

      【讨论】:

        猜你喜欢
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 2018-08-29
        • 2021-07-29
        • 2019-06-06
        • 2019-06-05
        • 1970-01-01
        • 2019-12-22
        相关资源
        最近更新 更多