Yii2 basic版登录使用Yii::$app->user->login($user);出现错误
程序员文章站
2022-04-20 15:07:45
...
Yii2 basic
版登录使用Yii::$app->user->login($user);
出现错误Array to string conversion
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']);
}
}
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;
}
}
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']); ?>
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);
出现错误Array to string conversion
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']);
}
}
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;
}
}
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']); ?>
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);
时出现错误,
public function getId()
{
return $this->getPrimaryKey();
}
不是 PrimaryKey