2017-08-29 139 views
0

上午实施与yii2一个宁静的API,我想知道如何终止用户的访问令牌Yii2到期的访问令牌

在我登录控制器

if($model->login()){ 
     return [ 
     "access_token' => Yii::$app->user->identity->getAuthKey(), 
     ]; 
    } 

现在在我的其他控制器我实现这个行为

class DefaultController extends Controller { 

    $behaviors['authenticator']   = [ 
     'class'  => CompositeAuth::className(), 
     'authMethods' => [ 
      QueryParamAuth::className(), 
     ], 
    ]; 

    } 

每当IU送我的请求访问令牌在我的网址其中一期工程

但现在的问题是,访问令牌不会过期

如何设置访问令牌的到期时间?

+0

您正在使用哪个用户扩展? – scaisEdge

+0

我没有使用任何扩展 –

+0

请检查此[答案](https://stackoverflow.com/a/42764555/7818938)它可以为你有用。 – vityapro

回答

0

在用户模型中添加属性“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; 
} 

显然,你需要调用generateAccessToken()设置有效的访问令牌。

注意!代码未经测试。