yii2 的登录注册 轮子
//利用到了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 的登录注册 轮子的更多相关文章
- Yii2 用户登录
在Yii2的basic版本中默认是从一个数组验证用户名和密码,如何改为从数据表中查询验证呢?且数据库的密码要为哈希加密密码验证? 下面我们就一步一步解析Yii2的登录过程. 一. 创建user表模型 ...
- web全栈开发之网站开发二(弹出式登录注册框前端实现-类腾讯)
这次给大家分享的是目前很多网站中流行的弹出式登录框,如下面的腾讯网登录界面,采用弹出式登录的好处是大大提升了网站的用户体验和交互性,用户不用重新跳转到指定的页面就能登录,非常方便 先来个演示地址 要实 ...
- android安卓Sqlite数据库实现用户登录注册
看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...
- JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册
写在最前: 下午有招聘会,不想去,总觉得没有准备好,而且都是一些不对口的公司,可是又静不下心来,就来写个博客. 最近在仿造一个书城的网站:http://www.yousuu.com ,UI直接拿来用, ...
- HTML登录注册界面怎么制作?
在没有学习CSS样式的前提下,是如何做一个简单的注册界面的. 一.表单标签(form) 首先我们先写一个<form></form>的标签,form标签属于表单标签,通常我们的登 ...
- php+ajax 登录注册页面
主要是登录注册功能,前端后台验证没有什么,这个大家可以自己加上去,比如过滤啊,正则啊等 还是先放图吧 这是登录及注册界面 点击注册切换到注册界面,点击登录切换到登录界面 <!DOCTYPE h ...
- 7. Swift 基于Xmpp和openfire实现一个简单的登录注册
1. 基本步骤:首先导入Xmpp框架,配置环境 ->由于我们使用的是OC的Xmpp框架,再进行Swift开发时需要进行桥接. 具体方法就是创建一个基于c的.h的头文件,然后将我们需要编译OC的语 ...
- Nodejs学习总结 -Express 登录注册示例(二)
项目创建后,我们来做个登录注册实例,详细操作步骤如下. 1.新建项目demo ,具体操作步骤参考上一章内容 https://www.cnblogs.com/Anlycp/ 2.添加mysql和sess ...
- iOS开发一个用户登录注册模块需要解决的坑
最近和另外一位同事负责公司登录和用户中心模块的开发工作,开发周期计划两周,减去和产品和接口的协调时间,再减去由于原型图和接口的问题,导致强迫症纠结症状高发,情绪不稳定耗费的时间,能在两周基本完成也算是 ...
随机推荐
- yield关键字的使用
yield的中文是什么意思呢? 在金山词霸上面的翻译是: vt.屈服,投降: 生产: 获利: 不再反对 vi.放弃,屈服: 生利: 退让,退位 n.产量,产额: 投资的收益: 屈服,击穿: 产品 个人 ...
- Http和Https的区别--笔记
学习链接: 知乎:https://www.zhihu.com/question/19577317 法号桑菜 http://blog.csdn.net/jasonjwl/article/details/ ...
- Ienumerable和Ienumerator的使用
using UnityEngine; using System.Collections; public class TestCoroutine : MonoBehaviour { void Start ...
- python3绘图示例1(基于matplotlib)
#!/usr/bin/env python# -*- coding:utf-8 -*- import numpy as npimport matplotlib.pyplot as pltimport ...
- MAC读取希捷移动硬盘ntfs
希捷提供了mac读取ntfs磁盘的软件,Paragon. 搜索关键词 "希捷" "mac" 或者通过以下链接进入 https://www.seagate.com ...
- mouse事件在JQ中的应用(在动画与交互中用得比较多).
mousedown与mouseup事件 用户交互操作中,最简单直接的操作就是点击操作,因此jQuery提供了一个mousedown的快捷方法可以监听用户鼠标按下的操作,与其对应的还有一个方法mouse ...
- ARM实验5 —— 按键中断实验
key_int按键中断实验 实验内容: 通过开发板上的按键中断控制led灯进行跑马灯并打印信息. 通过简单事例说明猎户座4412处理器的GIC中断处理的应用,设置key2按键连接的引脚为中断模式,当识 ...
- 【CF660E】Different Subsets For All Tuples(组合数学)
点此看题面 大致题意: 有一个长度为\(n\)的数列,每个位置上数字的值在\([1,m]\)范围内,则共有\(m^n\)种可能的数列.分别求出每个数列中本质不同的子序列个数,然后求和. 一些分析 首先 ...
- Poj(1125),Floyd,
题目链接:http://poj.org/problem?id=1125 多源点最短路中的,最长路的,最短路. 看到这里就懵逼了,解释一下,找到一个源点,使得路最短,(遍历源点),路最短怎么求呢? 就是 ...
- 2018.7.20 编程题: 写一个Singleton出来。
编程题: 写一个Singleton出来. Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 一般Singleton模式通常有几种种形式: 第一种形式: 定义 ...