用户登录 - 实现IdentityInterface接口

  • 作者:KK

  • 发表日期:2017.1.27


Yii已经封装好登录处理的逻辑了,但是这些逻辑需要获取用户ID、查询数据库,它不能自己写,因为它不知道我们的用户ID有哪些、是数字还是字母,查数据库又是哪张表呢?

所以这些内容就要我们来处理了,所以要使用Yii的用户登录,并不是说配置一下子就能用起来的,而是要咱们也写一部分代码嵌进去才能整合出一个完整的用户登录过程


yii\web\IdentityInterface接口就是我们要实现的东西了,咱可以随便定义一个类去实现这个接口,但通常情况下都是用一个AR模型来实现它

而这个AR模型对应的表就是你系统里设计的用户表

示例:

namespace app\models;

class User extends \yii\db\ActiveRecord implements \yii\web\IdentityInterface{
	public static function tableName(){
		return 'user';
	}
	
	/**
	 * 这个方法用于根据ID查找用户
	 * @param mixed $id 用户ID,根据各自系统的设计不同,可能会是字母,但通常是数字
	 */
	public static function findIdentity($id)
	{
		return static::findOne($id);
	}

	/**
	 * 这个方法用于根据用户名查找用户
	 * @param string $username 用户名
	 */
	public static function findByUsername($username)
	{
		return static::findOne(['username' => $username]);
	}

	/**
	 * 返回用户ID
	 */
	public function getId()
	{
		return $this->id;
	}

	/**
	 * 通过类似OAuth协议产生的token来找用户,实际一般不会往db里找,而是往缓存里找
	 */
	public static function findIdentityByAccessToken($token, $type = null)
	{
		throw new \yii\base\ErrorException('暂未实现'); //不实现这个方法不会影响基本登录的处理,我们先学基础
	}

	/**
	 * 返回OAuth的key
	 */
	public function getAuthKey()
	{
		throw new \yii\base\ErrorException('暂未实现'); //不影响基本使用
	}
}

类似这样的代码其实在下载安装提到的应用模板里已经有了,打开yii-demo\models\User.php就能看到

虽然官方的实现略有不同,但思路都一样,大家都为了从某个数据载体中取得用户数据(官方是从一个配置数组里for循环扫描查找,我们实际上是往db里找)

这样就实现了返回对应的用户id等信息,接下来学习怎么用起来,让封装好的处理逻辑Yii实现登入登出之类的处理