【发布时间】:2020-03-31 22:58:26
【问题描述】:
使用 sizeg/yii2-jwt 创建 JWToken 是可行的。我可以发给客户。我通过下一个请求从客户端取回它,可以验证令牌并可以从令牌访问用户数据。
在我的 Apicontroller 中有
$behaviors['authenticator'] = [
'class' => \sizeg\jwt\JwtHttpBearerAuth::class,
'except' => ['login', 'logout', 'password'],
];
在我的用户模型中我有代码
public static function findIdentityByAccessToken($token, $type = null)
{
if (preg_match('=^\d{1,6}$=', $token->getClaim('user')->id)) {
return new static($token->getClaim('user'));
}
return null;
}
现在在每个控制器中,我都可以使用
访问用户数据Yii::$app->user->id
Yii::$app->user->name
但我如何才能访问令牌中的其他声明?我在令牌中提出了其他声明,例如,我将用户设备上的本地时间(可能在另一个时区)与服务器时间之间的时差存储在声明“tsDiff”中。当然,我可以再次读取和解析令牌
$token = Yii::$app->jwt->getParser()->parse((string) $jwtString);
$token->getClaim('tsDiff');
但是令牌已经被解析和验证以进行身份验证,重复执行两次没有多大意义。但我不知道如何在控制器的任何地方访问其他声明?
【问题讨论】: