2015-03-22 10:17:49 9070次浏览 3条回答 0 悬赏 5 金钱

为什么登录认证后Yii::$app->user->isGuest的值还是为true?

补充于 2015-03-22 17:04

登录的代码

app\models\loginform

public function login()
    {
        if ($this->validate()) {
            return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
        } else {
            return false;
        }
    }

   public function getUser()
    {
        if ($this->_user === false) {
            $this->_user = User::findByUsername($this->username);
        }

        return $this->_user;
    }

app\models\user

class User extends ActiveRecord implements \yii\web\IdentityInterface
{
    public $rememberMe;
    public $username;
    public $password;


    public static function tableName()
    {
        return '{{%user}}';
    }


    public static function findIdentity($id){
        return static::findOne($id);
    }

    /**
     * @inheritdoc
     */
    public static function findIdentityByAccessToken($token, $type = null)
    {
        return static::findOne(['access_token' => $token]);
    }

    /**
     * Finds user by username
     *
     * @param  string      $username
     * @return static|null
     */
    public static function findByUsername($username)
    {
        $user = User::find()
            ->where(['UserName' => $username])
            ->asArray()
            ->one();
        if($user){
            return new static($user);
        }

        return null;
    }

    /**
     * @inheritdoc
     */
    public function getId()
    {
        return $this->UserName;
    }

    /**
     * @inheritdoc
     */
    public function getAuthKey()
    {
        return $this->authKey;
    }

    /**
     * @inheritdoc
     */
    public function validateAuthKey($authKey)
    {
        return $this->authKey === $authKey;
    }

    /**
     * Validates password
     *
     * @param  string  $password password to validate
     * @return boolean if password provided is valid for current user
     */

    public function validatePassword($password)
    {
        if($password===$password){
            return true;
        }else{
            return false;
        }
    }

    public function test(){
        $user=user::findOne(['username'=>'3color']);
        var_dump($user);
    }
}
  • 回答于 2015-03-22 12:35 举报

    那就是没登陆成功!!

    2 条回复
    回复于 2015-03-22 12:37 回复

    建议贴上代码,让大家帮忙看看!

    回复于 2015-03-22 17:01 回复

    @gn_zhu: 登录成功了的,有写入session了。

  • 回答于 2015-10-15 00:19 举报

    我也遇了同样的问题,不知你解决了吗?

    2 条回复
    回复于 2015-11-03 13:05 回复

    findIdentity方法按以下方式写,看你的能不能解决

    public static function findIdentity($id){

        $temp = parent::find()->where(['UserName'=>$id])->one();
        return isset($temp)?new static($temp):null;
    }
    
    回复于 2019-06-06 14:54 回复

    我用的基础版,也遇到了这个问题,这样可以解决

    觉得很赞
  • 回答于 2017-07-25 17:53 举报

    这个问题我在安装高级版的时候发现过,后来发现是配置的问题,就是看你前后台的配置里面user这个配置'identityClass' => 'common\models\User',最好在web下面的index.php打印配置出来,如果是app\models\User就是登录成功跳转后还是true了

    2 条回复
    回复于 2017-09-06 17:06 回复

    我的问题出在这了

    回复于 2017-11-20 15:28 回复

    您好,我也遇到了这个问题,请问“在web下面的index.php打印配置出来”是什么意思呢

    , 觉得很赞
您需要登录后才可以回答。登录 | 立即注册
bobysky
见习主管

bobysky

注册时间:2015-03-01
最后登录:2016-10-05
在线时长:23小时7分
  • 粉丝6
  • 金钱0
  • 威望0
  • 积分230

热门问题