继上篇实现注册功能之后,今天分享一下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();
}
点击查看更多内容
8人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦