用户登录 - 了解登录控制逻辑

  • 作者: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的源代码