用户登录 - 了解登录控制逻辑 ¶
作者:KK
发表日期:2017.1.29
我觉得有必要演示一下user组件的login方法和其它几个方法里主要干了些什么事
这样大家对Yii的登录处理会有一个大概的基本掌握,虽然以下代码不是实际上的代码,但浓缩起来的底层基本上就是做了这样的事情:
//登录
public function login(\yii\web\IdentityInterface $identity){
$this->_identity = $identity;
$loginToken = 计算随机token机tokenen();
Yii::$app->session->set('_identity', $loginToken);
$cookie = new Cookie([
'name' => '_identity',
'value' => $loginToken,
]);
Yii::$app->response->cookies->add($cookie);
return true;
}
//是否游客
public function getIsGuest(){
return $this->identity === false;
}
//获取实体
public function getIdentity(){
if($this->_identity !== false){
return $this->_identity;
}
//校验口令
$loginToken = Yii::$app->request->cookies['_identity'];
if($loginToken != Yii::$app->session->get('_identity')){
return false;
}
//取得用户实例
$userId = Yii::$app->session->get('__id');
if(!$userId){
return false;
}
$class = $this->identityClass;
$user = $class::findIdentity($userId); //我们一般在这个方法里进行findOne
$this->_identity = $user;
return $this->_identity;
}
//获取用户ID
public function getId(){
return $this->identity->id;
}
大概看看理解了就行,有兴趣研究的同学请详见yii\web\User的源代码