2017-08-29 137 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()設置有效的訪問令牌。

注意!代碼未經測試。