欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Yii2 basic版登录使用Yii::$app->user->login($user);出现错误

程序员文章站 2022-04-20 15:07:45
...

Yii2 basic版登录使用Yii::$app->user->login($user);出现错误Array to string conversion

  1. MyAuthenticationController.php

request->post('username',null);
        $password = Yii::$app->request->post('password',null);

        $user = User::findOne(['username'=>$username]);

        if(($username!=null)&&($password!=null))
        {
            if($user!=null){
                if($user->validatePassword($password)){
                    $this->redirect(['index']);//这里可以实现重定向
//                    Yii::$app->user->login($user);这是源代码,但是会出现“Array to string conversion”的错误,暂时还没有解决,所以使用上面的重定向代码来转向指定登录成功的页面
                }else{
                    $error = 'Password validation failed';
                }
            }else{
                $error = 'User not found';
            }
        }
        return $this->render('login',['error'=>$error]);
    }

    public function actionLogout()
    {
        Yii::$app->user->logout();
        return $this->redirect(['login']);
    }
}
  1. app\models\User.php

$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)
    {
        return static::findOne(['username'=>$username]);
    }

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

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

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

    /**
     * Validates password
     *
     * @param string $password password to validate
     * @return boolean if password provided is valid for current user
     */
    public function validatePassword($password)
    {
        return Yii::$app->security->validatePassword($password,$this->password_hash);
    }

    public function generateAuthKey()
    {
        $this->auth_key = Yii::$app->security->generateRandomKey();
    }

    public function beforeSave($insert)
    {
        if(parent::beforeSave($insert)){
            if($this->isNewRecord){
                $this->auth_key = \Yii::$app->security->generateRandomString();
            }
            return true;
        }
        return false;
    }
}
  1. views\my-authentication\login.php

['class'=>'alert-danger'],'body'=>$error]);
};
?>

user->isGuest) { ?>
    
'form-control']);?>
'form-control']); ?>
'btn btn-primary']); ?>

You are authentication!



'btn btn-warning']); ?>
  1. SQL

--
-- 表的结构 `user`
--

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `auth_key` varchar(32) NOT NULL,
  `password_hash` varchar(255) NOT NULL,
  `access_token` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

--
-- 转存表中的数据 `user`
--

INSERT INTO `user` (`id`, `username`, `auth_key`, `password_hash`, `access_token`) VALUES
(1, 'foo', '', '$2a$12$hL0rmIMjxhLqI.xr7jD1FugNWEgZNh62HuJj5.y34XBUfBWB4cppW', NULL);

用户名是foo,密码是foopassword,登录后在Yii::$app->user->login($user);时出现错误,
Yii2 basic版登录使用Yii::$app->user->login($user);出现错误

回复内容:

Yii2 basic版登录使用Yii::$app->user->login($user);出现错误Array to string conversion

  1. MyAuthenticationController.php

request->post('username',null);
        $password = Yii::$app->request->post('password',null);

        $user = User::findOne(['username'=>$username]);

        if(($username!=null)&&($password!=null))
        {
            if($user!=null){
                if($user->validatePassword($password)){
                    $this->redirect(['index']);//这里可以实现重定向
//                    Yii::$app->user->login($user);这是源代码,但是会出现“Array to string conversion”的错误,暂时还没有解决,所以使用上面的重定向代码来转向指定登录成功的页面
                }else{
                    $error = 'Password validation failed';
                }
            }else{
                $error = 'User not found';
            }
        }
        return $this->render('login',['error'=>$error]);
    }

    public function actionLogout()
    {
        Yii::$app->user->logout();
        return $this->redirect(['login']);
    }
}
  1. app\models\User.php

$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)
    {
        return static::findOne(['username'=>$username]);
    }

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

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

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

    /**
     * Validates password
     *
     * @param string $password password to validate
     * @return boolean if password provided is valid for current user
     */
    public function validatePassword($password)
    {
        return Yii::$app->security->validatePassword($password,$this->password_hash);
    }

    public function generateAuthKey()
    {
        $this->auth_key = Yii::$app->security->generateRandomKey();
    }

    public function beforeSave($insert)
    {
        if(parent::beforeSave($insert)){
            if($this->isNewRecord){
                $this->auth_key = \Yii::$app->security->generateRandomString();
            }
            return true;
        }
        return false;
    }
}
  1. views\my-authentication\login.php

['class'=>'alert-danger'],'body'=>$error]);
};
?>

user->isGuest) { ?>
    
'form-control']);?>
'form-control']); ?>
'btn btn-primary']); ?>

You are authentication!



'btn btn-warning']); ?>
  1. SQL

--
-- 表的结构 `user`
--

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `auth_key` varchar(32) NOT NULL,
  `password_hash` varchar(255) NOT NULL,
  `access_token` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

--
-- 转存表中的数据 `user`
--

INSERT INTO `user` (`id`, `username`, `auth_key`, `password_hash`, `access_token`) VALUES
(1, 'foo', '', '$2a$12$hL0rmIMjxhLqI.xr7jD1FugNWEgZNh62HuJj5.y34XBUfBWB4cppW', NULL);

用户名是foo,密码是foopassword,登录后在Yii::$app->user->login($user);时出现错误,
Yii2 basic版登录使用Yii::$app->user->login($user);出现错误

public function getId()
{
    return $this->getPrimaryKey();
}

不是 PrimaryKey

相关标签: php yii2