php - Yii2 basic版登录使用Yii::$app->user->login($user);出现错误
本文介绍了php - Yii2 basic版登录使用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
这篇关于php - Yii2 basic版登录使用Yii::$app->user->login($user);出现错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文