2018-05-29 20:24:11 2966次浏览 3条回答 0 悬赏 10 金钱

如果我使用接口的方式来登录,登录成功之后返回给用户一个token,以后每次请求带上这个token就可以了。
现在有一个问题想请一下大家,我需要怎样才能用 Yii::$app->getUser()->getIdentify() 获取到用户信息呢?

感谢各位!

  • 回答于 2018-05-29 23:26 举报
    /**
     * @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;
    }
    
  • 回答于 2018-05-30 16:06 举报

    实现IdentityInterface方法的相应接口,有些接口可以不使用,你可以抛出函数不可用异常.
    $user=Yii::$app->user->getIdentity();
    这个直接返回一个user对象,然后按照操作模型的方式来操作这个对象就可以得到相应的信息.
    加我的QQ:310103270来一起学习

  • 回答于 2018-05-31 11:05 举报

    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
助理

pandaxnm

注册时间:2017-02-26
最后登录:2019-02-21
在线时长:11小时3分
  • 粉丝1
  • 金钱15
  • 威望0
  • 积分125

热门问题