API 的 getIdentify() 问题 [ 2.0 版本 ]
如果我使用接口的方式来登录,登录成功之后返回给用户一个token,以后每次请求带上这个token就可以了。
现在有一个问题想请一下大家,我需要怎样才能用 Yii::$app->getUser()->getIdentify()
获取到用户信息呢?
感谢各位!
共 3 个回答
-
/** * @inheritdoc * @param int|string $id */ public static function findIdentity($id) { return static::findOne($id); } /** * @inheritdoc * @param mixed $token * @param null $type */ public static function findIdentityByAccessToken($token, $type = null) { return static::find() ->where(['=', 'token', $token]) ->one(); } /** * @inheritdoc */ public function getId() { return $this->id; } /** * @inheritdoc */ public function getAuthKey() { return $this->auth_key; }
-
Electricight 回答于 2018-05-30 16:06 举报
实现IdentityInterface方法的相应接口,有些接口可以不使用,你可以抛出函数不可用异常.
$user=Yii::$app->user->getIdentity();
这个直接返回一个user对象,然后按照操作模型的方式来操作这个对象就可以得到相应的信息.
加我的QQ:310103270来一起学习 -
Yii提供了一个登陆认证的接口 IdentityInterface
你需要自己定义一个模型
User extend ActiveRecord implements IdentityInterface { /** * @inheritdoc * @param int|string $id */ public static function findIdentity($id) { return static::findOne($id); } /** * @inheritdoc * @param mixed $token * @param null $type */ public static function findIdentityByAccessToken($token, $type = null) { return static::find() ->where(['=', 'token', $token]) ->one(); } /** * @inheritdoc */ public function getId() { return $this->id; } /** * @inheritdoc */ public function getAuthKey() { return $this->auth_key; } }
然后 Yii提供了一个user组件模型 可以拿了直接使用,实现登陆
Yii::$app->user->login():
这个就是Yii提供的上面我们创建了一个User模型,但是这个模型只是用来做登陆验证的(也就是和Yii的登录验证对接)
但是我们还需要一个对应User表的User模型,这个User模型和上面创建的User验证模型不同的。
第一个User模型只是做登陆验证的,
第二个User模型是对User表数据做映射的。在第二个User模型里定义:
public function login1()//这里为了和Yii::$app->user->login区分,起名叫 login1 { if ($this->validate()) { //注意,注意,注意这一步Yii::$app->user->login();。。。。。 return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0); } else { return false; } } protected function getUser() { if ($this->_user === null) { $this->_user = User::findByUsername($this->mobile); //这里是调用第一个User模型的findByUsername } return $this->_user; }
在controller里调用第二个User表映射模型的login1方法实现登陆:
这样写:$model = new UserTable(['scenario' => 'login']); $model->login();
而你说的 怎样才能用
Yii::$app->getUser()->getIdentify()
获取到用户信息呢?其实这这样
Yii::$app->User->Identify
这样写就可以获取用户信息。
怎么样获取的呢?
看上面代码这里:注意,注意,注意这一步Yii::$app->user->login()
参数里把用户信息传进去,登录成功,里面会就会给这个User组件复制当前登录用户信息。也就是登录成功就可以直接这么使用了
Yii::$app->User->Identify
来获取用户信息,如果想继续研究可以看看 注意,注意,注意这一步Yii::$app->user->login()
这个login里的方法怎么给Yii::$app->User->Identify
赋值的。就说到这里吧,不明吧就留言!
pandaxnm
最后登录:2019-02-21
在线时长:11小时3分
- 粉丝1
- 金钱15
- 威望0
- 积分125