//利用到了yii2 框架之中的验证规则 进行判定而已 也不是很高深的东西  但是 使用框架自身的轮子 会有安全性能的隐患

1注册reg controller 中 我都以admin 为例子

public function actionAdd()
{
$model = new Admin();
if (Yii::$app->request->isPost) {
$post = Yii::$app->request->post();
if ($re=($model->reg($post))) {
Yii::$app->session->setFlash('info','添加成功');
return $this->refresh();
}
Yii::$app->session->setFlash('info','添加失败');
}
return $this->render('add',['model'=>$model]);
}

2.1 model

 public function reg($data)
{
$this->scenario = 'adminadd';
if ($this->load($data) && $this->validate()) {
$this->adminpass = Yii::$app->getSecurity()->generatePasswordHash($this->adminpass); //这儿使用到了yii框架的hash 密码 获取的时候使用validatepassword 验证
$this->createtime = time();
if ($this->save(false)) {
return true;
}
return false;
}
return false;
}

2.2 model 中的rules 验证规则

public function rules()
{
return [
['adminuser', 'required', 'message' => '管理员账号不能为空', 'on' => ['login', 'seekpass', 'changepass', 'adminadd', 'changeemail']],
['adminpass', 'required', 'message' => '管理员密码不能为空', 'on' => ['login', 'changepass', 'adminadd', 'changeemail']],
['rememberMe', 'boolean', 'on' => 'login'],
['adminpass', 'validatePass', 'on' => ['login', 'changeemail']],
['adminpass', 'validatePassword', 'on' => ['login']],
['adminemail', 'required', 'message' => '电子邮箱不能为空', 'on' => ['seekpass', 'adminadd', 'changeemail']],
['adminemail', 'email', 'message' => '电子邮箱格式不正确', 'on' => ['seekpass', 'adminadd', 'changeemail']],
['adminemail', 'unique', 'message' => '电子邮箱已被注册', 'on' => ['adminadd', 'changeemail']],
['adminuser', 'unique', 'message' => '管理员已被注册', 'on' => 'adminadd'],
['adminemail', 'validateEmail', 'on' => 'seekpass'],
['repass', 'required', 'message' => '确认密码不能为空', 'on' => ['changepass', 'adminadd']],
['repass', 'compare', 'compareAttribute' => 'adminpass', 'message' => '两次密码输入不一致', 'on' => ['changepass', 'adminadd']],
];
}

3 view 页面的展示 这个不重要

<?php
use yii\bootstrap\ActiveForm;
use yii\helpers\Html;
$this->title = '注册'; ?>
<!-- main container --> <div class="container-fluid">
<div id="pad-wrapper" class="new-user">
<div class="row-fluid header">
<h3>注册员工</h3>
</div> <div class="row-fluid form-wrapper">
<!-- left column -->
<div class="span9 with-sidebar">
<div class="container">
<?php
if (Yii::$app->session->hasFlash('info')) {
echo Yii::$app->session->getFlash('info');
}
$form = ActiveForm::begin([
'options' => ['class' => 'new_user_form inline-input'],
'fieldConfig' => [
'template' => '<div class="span12 field-box">{label}{input}</div>{error}'
],
]);
?>
<?php echo $form->field($model, 'adminuser')->textInput(['class' => 'span9']); ?>
<?php echo $form->field($model, 'adminemail')->textInput(['class' => 'span9']); ?>
<?php echo $form->field($model, 'adminpass')->passwordInput(['class' => 'span9']); ?>
<?php echo $form->field($model, 'repass')->passwordInput(['class' => 'span9']); ?>
<div class="span11 field-box actions">
<?php echo Html::submitButton('创建', ['class' => 'btn-glow primary']); ?>
<span>或者</span>
<?php echo Html::resetButton('取消', ['class' => 'reset']); ?>
</div>
<?php ActiveForm::end(); ?>
</div>
</div>
<!-- side right column -->
<div class="span3 form-sidebar pull-right">
<div class="alert alert-info hidden-tablet">
<i class="icon-lightbulb pull-left"></i>
请在左侧填写员工相关信息,包括员工账号,电子邮箱,以及密码
</div>
</div>
</div>
</div>
</div>
</div>
<!-- end main container -->

/-----------------------以上就是简单的注册功能-----------------------------------------------------------------

// 登陆功能 login

controller 中

public function actionLogin()
{ $this->layout =false;
$model = new Admin();
//登录操作
if (Yii::$app->request->isPost) {
//获得数据信息
$post = Yii::$app->request->post();
if ($model->login($post)) {
$this->redirect(['default/index']);
Yii::$app->end();
}
}
return $this->render('login',['model'=>$model]);
}

model

注意查看我上面的验证规则 一点要看清楚 我自定义了两个验证规则 验证用户是否存在 和密码 不匹配的这两种情况

自定义验证1

 public function validatePass()
{
if (!$this->hasErrors()) {
$data = self::find()->where('adminuser = :user', [":user" => $this->adminuser])->one(); if (is_null($data)) {
$this->addError("adminpass", "用户或密码错误");
return false;
}
if (!Yii::$app->getSecurity()->validatePassword($this->adminpass, $data->adminpass))
{
$this->addError("adminpass", "用户或密码错误");
}
}
}

自定义验证2

public function validatePassword(){
if (!$this->hasErrors()) {
$data = self::find()->where('adminuser = :user', [':user' => $this->adminuser])->one();
if (is_null($data)) {
$this->addError('adminpass','用户名不存在');
exit;
} $data2 = self::find()->where('adminuser=:user and adminpass = :pass',[':user'=>$this->adminuser,':pass'=>$data->adminpass])->one(); if (is_null($data2)) {
$this->addError('adminpass','密码错误');
}
} }

model中的login代码

  public function login($data)
{
$this->scenario = "login";
if ($this->load($data) && $this->validate()) {
$lifetime = $this->rememberMe ? 24*3600 : 0;
$session = Yii::$app->session;
session_set_cookie_params($lifetime);
$session['admin'] = [
'adminuser' => $this->adminuser,
'isLogin' => 1,
];
$this->updateAll(['logintime' => time(), 'loginip' => ip2long(Yii::$app->request->userIP)], 'adminuser = :user', [':user' => $this->adminuser]);
return (bool)$session['admin']['isLogin'];
}
return false;
}

login view 这个随便大家在网上找就可以了我随便提供一个

<body class="login-bg">
<?php $this->beginBody(); ?> <div class="row-fluid login-wrapper">
<a class="brand" href="<?php echo yii\helpers\Url::to(['/index/index']) ?>"></a>
<?php $form = ActiveForm::begin([
'fieldConfig' => [
'template' => '{error}{input}',
],
]); ?>
<div class="span4 box">
<div class="content-wrap">
<h6>小涛商城 - 后台管理</h6>
<?php echo $form->field($model, 'adminuser')->textInput(["class" => "span12", "placeholder" => "管理员账号"]); ?>
<?php echo $form->field($model, 'adminpass')->passwordInput(["class" => "span12", "placeholder" => "管理员密码"]); ?>
<a href="<?php echo yii\helpers\Url::to(['public/seekpassword']); ?>" class="forgot">忘记密码?</a>
<?php echo $form->field($model, 'rememberMe')->checkbox([
'id' => 'remember-me',
'template' => '<div class="remember">{input}<label for="remember-me">记住我</label></div>',
]); ?>
<?php echo Html::submitButton('登录', ["class" => "btn-glow primary login"]); ?>
</div>
</div>
<?php ActiveForm::end(); ?>
</div>
<?php
$js = <<<JS
$(function () {
// bg switcher
var \$btns = $(".bg-switch .bg");
\$btns.click(function (e) {
e.preventDefault();
\$btns.removeClass("active");
$(this).addClass("active");
var bg = $(this).data("img"); $("html").css("background-image", "url('img/bgs/" + bg + "')");
}); });
JS;
$this->registerJs($js);
?>
<?php $this->endBody(); ?>
</body>

最新文章

  1. 学习下nginx负载均衡--深入理解nginx
  2. C#中的yield return与Unity中的Coroutine(协程)(下)
  3. centos7的网络配置以及设置主机名和绑定IP的问题
  4. canvas-js贝塞尔曲线代码在线生成工具
  5. linux下配置tomcat7 + solr4.9
  6. 如何使用C#操作快捷方式(获取快捷方式属性、创建快捷方式)
  7. ERP 实施和应用不成功共同点
  8. indexOf()不区分大小写用法
  9. MFC应用程序创建窗口的过程 good
  10. hdu 1051Wooden Sticks
  11. JPDA 利用Eclipse和Tomcat进行远程调试 --转
  12. C语言刷新缓冲区(转载)
  13. IPMI 配置BMC用户设置
  14. Test注解的两个属性:expected和timeout
  15. Dom操作高级应用
  16. hdu_5927_Auxiliary Set(xjb搞)
  17. 201521123014 《Java程序设计》第10周学习总结
  18. [NOIP赛前冲刺第一期]初赛基础知识归纳
  19. 搭建Fabric网络(二)下载bin和images
  20. keras与tensorboard结合使用

热门文章

  1. 搭建maven web项目并配置quartz定时任务【业务:对比数据变化内容】 历程
  2. Hibernate课程 初探一对多映射4-2 cascade级联属性
  3. SSM环境下配置log4j输出sql和异常到控制台和本地日志文件中
  4. 非关系型数据库(NOSQL)-Redis
  5. Android自定义控件 -- 带边框的TextView
  6. android ContentProvider共享数据
  7. 【原创】SQL SERVER 2012安装配置说明(多图详解)
  8. Java实习问题记录
  9. html中如何使用python屏蔽一些基本功能
  10. ubuntu terminal copy paste