Yii2 过期的访问令牌

Geo*_*off 0 php yii2

我正在使用 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() 来设置一个有效的访问令牌。

笔记!代码未经测试。