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