【问题标题】:Yii2 expiring access tokensYii2 即将过期的访问令牌
【发布时间】:2017-09-01 15:43:51
【问题描述】:

我正在用 yii2 实现一个 restful api,我想知道如何使用户的访问令牌过期

在我的登录控制器中

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

现在在我的其他控制器中实现了这种行为

class DefaultController extends Controller {

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

  }

每当我在我的 url 中发送带有访问令牌的请求时,这都有效

但现在的问题是访问令牌没有过期

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

【问题讨论】:

  • 你正在使用哪个用户扩展?
  • 我没有使用任何扩展
  • 请检查这个answer它对你有用。

标签: php yii2


【解决方案1】:

在您的用户模型中添加一个属性“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() 来设置一个有效的访问令牌。

注意!代码未经测试。

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多