//利用到了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>

yii2 的登录注册 轮子的更多相关文章

  1. Yii2 用户登录

    在Yii2的basic版本中默认是从一个数组验证用户名和密码,如何改为从数据表中查询验证呢?且数据库的密码要为哈希加密密码验证? 下面我们就一步一步解析Yii2的登录过程. 一. 创建user表模型 ...

  2. web全栈开发之网站开发二(弹出式登录注册框前端实现-类腾讯)

    这次给大家分享的是目前很多网站中流行的弹出式登录框,如下面的腾讯网登录界面,采用弹出式登录的好处是大大提升了网站的用户体验和交互性,用户不用重新跳转到指定的页面就能登录,非常方便 先来个演示地址 要实 ...

  3. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...

  4. JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册

    写在最前: 下午有招聘会,不想去,总觉得没有准备好,而且都是一些不对口的公司,可是又静不下心来,就来写个博客. 最近在仿造一个书城的网站:http://www.yousuu.com ,UI直接拿来用, ...

  5. HTML登录注册界面怎么制作?

    在没有学习CSS样式的前提下,是如何做一个简单的注册界面的. 一.表单标签(form) 首先我们先写一个<form></form>的标签,form标签属于表单标签,通常我们的登 ...

  6. php+ajax 登录注册页面

    主要是登录注册功能,前端后台验证没有什么,这个大家可以自己加上去,比如过滤啊,正则啊等 还是先放图吧 这是登录及注册界面  点击注册切换到注册界面,点击登录切换到登录界面 <!DOCTYPE h ...

  7. 7. Swift 基于Xmpp和openfire实现一个简单的登录注册

    1. 基本步骤:首先导入Xmpp框架,配置环境 ->由于我们使用的是OC的Xmpp框架,再进行Swift开发时需要进行桥接. 具体方法就是创建一个基于c的.h的头文件,然后将我们需要编译OC的语 ...

  8. Nodejs学习总结 -Express 登录注册示例(二)

    项目创建后,我们来做个登录注册实例,详细操作步骤如下. 1.新建项目demo ,具体操作步骤参考上一章内容 https://www.cnblogs.com/Anlycp/ 2.添加mysql和sess ...

  9. iOS开发一个用户登录注册模块需要解决的坑

    最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...

随机推荐

  1. promise之nodejsQ的详细用法总结

    这里主要讲node.js中Q的各种用法及说明总结,不详细介绍promise及原理.关于promise介绍可以查看我的另一篇文章: https://www.cnblogs.com/yzeng/p/976 ...

  2. 连接数据库报错:1130-Host 'xxx' is not allowed to connect to this MySQL server解决

    出现这个问题的同学都很奇怪,为啥用localhost就可以连接上,但是使用本地ip就不行.出现这个问题的原因就是mysql未开启mysql远程访问权限导致. 这时候我们就用cmd去访问下你的mysql ...

  3. 超详细Hexo+Github博客搭建小白教程

    原文链接:超详细Hexo+Github博客搭建小白教程 去年9月的时候开始搭建了第一个自己的独立博客,到现在也稍微像模像样了.很多小伙伴应该也想过搭建一个自己的博客,网上也有一堆详细教程.我在此稍稍总 ...

  4. python的元组

    Python的元组和列表很相似,只是元组一旦定义就无法修改,比如定义一个学生的元组: names = ('alex','jack') print(names)#('alex', 'jack') pri ...

  5. nginx-1.12.2编译安装指导

    nginx-1.12.2编译安装 下载源码包 安装 安装后配置 下载源码包 下载地址:http://nginx.org/en/download.html nginx-1.12.2:http://ngi ...

  6. Cordova各个插件使用介绍系列(七)—$cordovaStatusbar手机状态栏显示

    在项目中发现Android和iOS在手机状态栏样式不一样,然后就查到有一个cordova插件可以解决这个问题 1.下载插件$cordovaStatusbar命令: cordova plugin add ...

  7. Extjs4几个小知识点

    1.Why user "var me=this" in Extjs4?有个英文解释很好: Say you have a method in your object A which ...

  8. ASP.NET设置母版页

    母版页允许开发人员创建具有指定的可编辑区域的站点级模板.随后,此模板可应用到网站中的 ASP.NET 页面上.这些 ASP.NET 页面只需为母版页中指定的可编辑区域提供相应内容 – 在使用母版页的所 ...

  9. 在西雅图华盛顿大学 (University of Washington) 就读是怎样一番体验?

    http://www.zhihu.com/question/20811431   先说学校.优点: 如果你是个文青/装逼犯,你来对地方了.连绵不断的雨水会一下子让写诗的感觉将你充满. 美丽的校园.尤其 ...

  10. vos设置可呼出手机或固话

    问题: 默认公司只让呼出手机号码,但有的客户要求能打固话,怎么办? 落地网关——补充设置——落地前缀——落地被叫改写规则 在改写规则里添加固话号段即可 具体案例: 5201——1表示让520号段只能拨 ...