继上篇实现注册功能之后,今天分享一下Yii2.0实现登录和注销功能
-
需要先配置好数据库,并且数据库里有相应的用户注册信息
- 在controller/siteController.php 控制器里定义并设置登录方法
/**
* @return string\yii\web\Response
* 显示登录页面
*/
public function actionLogin()
{
if(!Yii::$app->user->isGuest)//如果是已注册则跳转到首页
{
return $this->goHome();
}
$model=new LoginForm();//实例化登录表单模型类
if($model->load(Yii::$app->request->post()) && $model->login())
{
return $this->goHome();//如果登录成功则转到首页
}else {
return $this->render('login',['model'=>$model]);//登录不成功则显示登录界面,显示登录界面需要输出视图文件(见下面),并将配置模型
}
}
* 在models/LoginForm 模型类里写下以下代码和方法
namespace home\models;//home是我自己建的根目录文件夹
use Yii;
use yii\base\Model;
class LoginForm extends Model
{
public $username;
public $password;
public $rememberMe;
/**
* @inheritdoc
* 设置表单字段的验证规则
*/
public function rules()
{
return [
[['username', 'password'], 'required'],//设置字段不能为空
['rememberMe','boolean'],
];
}
/**
* @inheritdoc
* 设置字段的标签命名
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'username' => '用户名',
'password'=>'密码',
'rememberMe'=>'记住我',
];
}
/**
* @return bool
* 设置登录方法
*/
public function login()
{
$user=User::findOne(['username'=>$this->username]);//判断用户名是否正确
if(is_null($user))
{
Yii::$app->session->setFlash('错误提示','用户名输入有误');
// echo $this->addError('username','用户名输入有误');
return false;
}
else {
if(Yii::$app->security->validatePassword($this->password, $user->password_hash))//判断密码是否正确
{
Yii::$app->user->login($user);//登录用户
return true;
}else
{
Yii::$app->session->setFlash('错误提示','密码输入有误');
// echo $this->addError('password','密码输入有误');
return false;
}
}
}
}
- 在models/LoginForm 模型类里写下以下代码和方法
namespace home\models;//home是我自己建的根目录文件夹
use Yii;
use yii\base\Model;
class LoginForm extends Model
{
public $username;
public $password;
public $rememberMe;
/**
* @inheritdoc
* 设置表单字段的验证规则
*/
public function rules()
{
return [
[['username', 'password'], 'required'],//设置字段不能为空
['rememberMe','boolean'],
];
}
/**
* @inheritdoc
* 设置字段的标签命名
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'username' => '用户名',
'password'=>'密码',
'rememberMe'=>'记住我',
];
}
/**
* @return bool
* 设置登录方法
*/
public function login()
{
$user=User::findOne(['username'=>$this->username]);//判断用户名是否正确
if(is_null($user))
{
Yii::$app->session->setFlash('错误提示','用户名输入有误');
return false;
}
else {
if(Yii::$app->security->validatePassword($this->password, $user->password_hash))//判断密码是否正确
{
Yii::$app->user->login($user);//登录用户
return true;
}else
{
Yii::$app->session->setFlash('错误提示','密码输入有误');
return false;
}
}
}
}
- 在对于LoginForm模型类的设置里,需要用User 模型类对针对用户的数据库操作进行设置
User模型类可用Gii进行生成
namespace home\models;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;
class User extends ActiveRecord implements IdentityInterface
{
public static function findIdentity($id)
{
return static::findOne($id);// 找到用户登录id
}
public static function findIdentityByAccessToken($token, $type = null)
{
// TODO: Implement findIdentityByAccessToken() method.
}
public function getId()
{
return $this->id; // 返回用户id
}
public function getAuthKey()
{
// TODO: Implement getAuthKey() method.
}
public function validateAuthKey($authKey)
{
// TODO: Implement validateAuthKey() method.
}
}
-在view/site/文件夹下新建登录界面的视图文件login.php
<?php
use yii\widgets\ActiveForm;
use yii\bootstrap\Html;
?>
<div>
<?php $form=ActiveForm::begin();//表单开始 ?>
<?= $form->field($model,'username')->textInput(['autoFocus'=>'true','placeholder'=>'请输入账号']); ?>
<?= $form->field($model,'password')->passwordInput(['placeholder'=>'请输入密码'])->label('请输入密码啦');?>
<?= $form->field($model,'rememberMe')->checkbox(['label'=>'记住我']);?>
<div class="form-group">
<?= Html::submitButton('登录',['class'=>'btn btn primary','name'=>'login-button']);?>
</div>
<?php ActiveForm::end();?>
</div>
- 实现注销功能,在siteController里设置注销方法
/**
* @return \yii\web\Response
* 注销方法
*/
public function actionLogout()
{
Yii::$app->user->logout();//使用应用程序下面的logout()方法即可实现
return $this->goBack();
}
- 以上。本文涉及到的知识点有:
1、Yii框架里的Yii::$app->user->isGuest 可对用户是否是游客进行判断。
Yii::$app->user->login($user); //登录用户
Yii::$app->user->logout(); //注销用户
2、Yii::$app->session->setFlash('错误提示','用户名输入有误'); // 实现错误提示
3、表单组件ActiveForm的使用
热门评论
请问登录以后的权限怎么设置?