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

发布于 2022-09-01 19:37:49 字数 448 浏览 20 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧人 2022-09-08 19:37:49

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

玩物 2022-09-08 19:37:49

首先呢,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做接口才用到,更新方法类似

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文