首页 > Yii2 用户表authKey 和 token 字段何时更新

Yii2 用户表authKey 和 token 字段何时更新

yii2中登录需要通过 User::validateAuthKey() 来检测数据库中是否存在这个,文件@app/vendor/yiisoft/yii2/web/User.php ,也就是说,要使用Yii2自带的用户认证功能,设计的用户表必须包含 userid username authkey pwd 这几样字段,但问题是 authkey 这个随机码是什么时候更新?

文件@app/vendor/yiisoft/yii2/web/User.php 全部源码:https://github.com/yiisoft/yii2/blob/master/framework/web/User.php


authkey是用于你给用户一个链接,用于可以直接点击这个链接就能登陆的,如果没有这个,可以不要这个字段和功能


首先呢,authKey不一定非要存在用户表里,我就是单独用一个表存的,这个是用来验证自动登录cookie的合法性的。
更新呢:\yii\web\User有个beforeLogin事件,在事件里完成更新

authKey表字段如下:

uid int
key varchar

User Model如下:

    /**
     * 用户authKey关联对象
     */
    public function getAuthModel()
    {
        return $this->hasOne(AuthKey::className(), ['uid' => 'id']);
    }
    
    /**
     * 生成authkey
     * 自动登录时,cookie中的authkey
     */
    public function generateAuthKey() {
        $model = $this->authModel;
        if (!$model) {
            $model = new AuthKey();
            $model->uid = $this->id;
        }
        $model->key = Yii::$app->security->generateRandomString(32);
        $model->save(false);
    }

    //实现接口
    public function getAuthKey() {
        return $this->authModel->key;
    }

以上是authKey的生成方法
然后登录动作里,监听before_login事件

Yii::$app->user->on(\yii\web\User::EVENT_BEFORE_LOGIN, [$this->user, 'generateAuthKey']);

这样,每次主动登录,authKey都会更新

Token一般是restfull做接口才用到,更新方法类似

【热门文章】
【热门文章】