yii2 basic版登录使用yii::$app->user->login($user);出现错误array to string conversion
MyAuthenticationController.php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\User;
class MyAuthenticationController extends Controller
{
public function actionIndex()
{
echo 'login success'; exit;
}
public function actionLogin()
{
$error = null;
$username = Yii::$app->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
<?php
namespace app\models;
use Yii;
use yii\base\NotSupportedException;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;
class User extends ActiveRecord implements IdentityInterface
{
public static function tableName()
{
return 'user';
}
/**
* @inheritdoc
*/
public static function findIdentity($id)
{
return static::findOne(['id'=>$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
<?php
use \yii\bootstrap\ActiveForm;
use \yii\helpers\Html;
use \yii\bootstrap\Alert;
?>
<?php
if($error!=null){
echo Alert::widget(['options'=>['class'=>'alert-danger'],'body'=>$error]);
};
?>
<?php if(Yii::$app->user->isGuest) { ?>
<?php ActiveForm::begin() ?>
<div class="form-group">
<?php echo Html::label('Username','username'); ?>
<?php echo Html::textInput('username','',['class'=>'form-control']);?>
</div>
<div class="form-group">
<?php echo Html::label('Password','password'); ?>
<?php echo Html::passwordInput('password','',['class'=>'form-control']); ?>
</div>
<?php echo Html::submitButton('Login',['class'=>'btn btn-primary']); ?>
<?php ActiveForm::end(); ?>
<?php } else {?>
<h2>You are authentication!</h2>
<br/><br/>
<?php echo Html::a('logout',['my-authentication/logout'],['class'=>'btn btn-warning']); ?>
<?php } ?>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
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\User;
class MyAuthenticationController extends Controller
{
public function actionIndex()
{
echo 'login success'; exit;
}
public function actionLogin()
{
$error = null;
$username = Yii::$app->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
<?php
namespace app\models;
use Yii;
use yii\base\NotSupportedException;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;
class User extends ActiveRecord implements IdentityInterface
{
public static function tableName()
{
return 'user';
}
/**
* @inheritdoc
*/
public static function findIdentity($id)
{
return static::findOne(['id'=>$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
<?php
use \yii\bootstrap\ActiveForm;
use \yii\helpers\Html;
use \yii\bootstrap\Alert;
?>
<?php
if($error!=null){
echo Alert::widget(['options'=>['class'=>'alert-danger'],'body'=>$error]);
};
?>
<?php if(Yii::$app->user->isGuest) { ?>
<?php ActiveForm::begin() ?>
<div class="form-group">
<?php echo Html::label('Username','username'); ?>
<?php echo Html::textInput('username','',['class'=>'form-control']);?>
</div>
<div class="form-group">
<?php echo Html::label('Password','password'); ?>
<?php echo Html::passwordInput('password','',['class'=>'form-control']); ?>
</div>
<?php echo Html::submitButton('Login',['class'=>'btn btn-primary']); ?>
<?php ActiveForm::end(); ?>
<?php } else {?>
<h2>You are authentication!</h2>
<br/><br/>
<?php echo Html::a('logout',['my-authentication/logout'],['class'=>'btn btn-warning']); ?>
<?php } ?>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
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号