我正在使用 yii2 实现一个宁静的 api,我想知道如何使用户的访问令牌过期
在我的登录控制器中
if($model->login()){
return [
"access_token' => Yii::$app->user->identity->getAuthKey(),
];
}
Run Code Online (Sandbox Code Playgroud)
现在在我的其他控制器中正在实现这种行为
class DefaultController extends Controller {
$behaviors['authenticator'] = [
'class' => CompositeAuth::className(),
'authMethods' => [
QueryParamAuth::className(),
],
];
}
Run Code Online (Sandbox Code Playgroud)
每当 iu 在我的 url 中使用访问令牌发送我的请求时,它都会起作用
但现在的问题是访问令牌不会过期
如何设置访问令牌的到期时间?
小智 5
在您的用户模型中添加一个属性 'access_token' 并更改/添加这样的内容...
public static function findIdentityByAccessToken($token, $type = NULL)
{
// find user with token
if ($user = static::findOne(['access_token' => $token])) {
return $user->isAccessTokenValid() ? $user : null;
}
return null;
}
public function generateAccessToken($expireInSeconds)
{
$this->access_token = Yii::$app->security->generateRandomString() . '_' . (time() + $expireInSeconds);
}
public function isAccessTokenValid()
{
if (!empty($this->access_token)) {
$timestamp = (int) substr($this->access_token, strrpos($this->access_token, '_') + 1);
return $timestamp > time();
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
显然你需要调用 generateAccessToken() 来设置一个有效的访问令牌。
笔记!代码未经测试。