yii2自带了用户登录功能,修改一下就可以为我所用了,很是方便
1、修改 config\web.php 禁止自动登录
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => false, // 禁用自动登录
],
2、models\User.php 增加一个方法getOneUser:
public static function getOneUser()
{
foreach (self::$users as $user) {
return new static($user);
}
}
3、修改 models\LoginForm.php 加上方法 attributeLabels()
/**
* @return array the validation rules.
*/
public function rules()
{
return [
// username and password are both required
// [['username', 'password'], 'required'],
['username', 'required', 'message' => '账号不能为空'],
['password', 'required', 'message' => '密码不能为空'],
// rememberMe must be a boolean value
['rememberMe', 'boolean'],
// password is validated by validatePassword()
['password', 'validatePassword'],
];
}
public function attributeLabels()
{
return [
'username' => '账号',
'password' => '密码',
'rememberMe' => '自动登录',
];
}
修改登录验证方法 public function login() 自定义验证账号和密码就在这里进行
/**
* Logs in a user using the provided username and password.
* @return bool whether the user is logged in successfully
*/
public function login()
{
// if ($this->validate()) {
// return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
// }
// var_dump($this);
// die();
// hyx 自定义登录验证
if($this->username == 'qq' && $this->password == 'qq')
{
$user = User::getOneUser();
$user->username = 'qq';
$user->password = 'qq';
Yii::$app->session->set('userName', $user->username);
Yii::$app->user->login($user, 0);
return true;
}
return false;
}
这样修改 登录系统后,发现显示的用户名不正确
需要修改 views\layouts\main.php
把 Yii::$app->user->identity->username 换成 Yii::$app->session->get('userName') 即可
echo Nav::widget([
'options' => ['class' => 'navbar-nav navbar-right'],
'items' => [
// ['label' => 'Home', 'url' => ['/site/index']],
// ['label' => 'About', 'url' => ['/site/about']],
// ['label' => 'Contact', 'url' => ['/site/contact']],
Yii::$app->user->isGuest ? (
['label' => 'Login', 'url' => ['/site/login']]
) : (
'<li>'
. Html::beginForm(['/site/logout'], 'post')
. Html::submitButton(
// 'Logout (' . Yii::$app->user->identity->username . ')',
'Logout (' . Yii::$app->session->get('userName') . ')',
['class' => 'btn btn-link logout']
)
. Html::endForm()
. '</li>'
)
],
]);