Yii Framework2.0开发教程(10)配合mysql数据库实现用户登录
1、首先在mysql创建一个存用户的表格
create table test_user
(
user_id bigint(20) unsigned not null auto_increment comment 'ID',
user_email varchar(100) not null comment '电子邮件',
user_password varchar(100) not null comment '密码',
user_access_token varchar(200) comment 'access_token',
user_auth_key varchar(200) comment 'auth_key',
user_create_time datetime comment '创建时间',
primary key(user_id)
);
2、在表中插入一条登陆的账号
3、新建模型models/MysqlUser.php
<?php namespace app\models; use yii\db\ActiveRecord;
use yii\web\IdentityInterface; class MysqlUser extends ActiveRecord implements IdentityInterface
{
public static function tableName()
{
//相应的表名
return 'test_user';
} public static function findIdentity($id)
{
//自己主动登陆时会调用
$temp = parent::find()->where(['user_id'=>$id])->one();
return isset($temp)?new static($temp):null;
} public static function findIdentityByAccessToken($token, $type = null)
{
return static::findOne(['user_access_token' => $token]);
} public function getId()
{
return $this->user_id;
} public function getAuthKey()
{
return $this->user_auth_key;
} public function validateAuthKey($authKey)
{
return $this->user_auth_key === $authKey;
} public function validatePassword($password)
{
return $this->user_password === $password;
}
}
4、新建模型models/MloginForm.php
<?php namespace app\models; use Yii;
use yii\base\Model; //加上这一句,引用
use app\models\MysqlUser; class MloginForm extends Model
{
public $email;
public $password; private $_user = false; public function rules()
{
return [
['email','email','message'=>'必须是邮件格式'],
[['email','password'],'required','message'=>'必填'],
['password','validatePassword','message'=>'账号或密码不对'],
];
} //登陆
public function login()
{
if ($this->validate())
return Yii::$app->user->login($this->getUser(), 3600*24*30);
else
return false;
} //推断账号密码是否正确
public function validatePassword($attribute, $params)
{
if (!$this->hasErrors())
{
$user = $this->getUser(); if (!$user)
{
$this->addError($attribute, '账号或密码不对');
} }
} //依据邮箱和密码查询数据库
public function getUser()
{
if ($this->_user === false)
{
$this->_user = MysqlUser::find()->where(['user_email'=>$this->email,'user_password'=>$this->password])->one();
}
return $this->_user;
} } ?>
5、新建视图views/account/login.php
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?php
echo '<h1>'.$status.'</h1>';
?>
<?php $form = ActiveForm::begin(); ?>
<?php echo $form->field($model, 'email'); ?>
<?php echo $form->field($model, 'password'); ?>
<?php echo Html::submitButton('登陆'); ?>
<?php ActiveForm::end(); ?>
6、新建控制器controllers/AccountController.php
<?php
namespace app\controllers; use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter; //引用
use app\models\MloginForm; class AccountController extends Controller
{
function actionLogin()
{
$model = new MloginForm();
if($model->load(Yii::$app->request->post()))
{
if($model->login())
//登陆成功
return $this->renderPartial('login',['model'=>$model,'status'=>'成功']);
else
//登陆失败
return $this->renderPartial('login',['model'=>$model,'status'=>'失败']);
}
else
{
return $this->renderPartial('login',['model'=>$model,'status'=>'']);
}
}
}
另外,自己主动登陆配置的地方是config/web.php
效果例如以下所看到的
点击登陆button后
若账号password不对
自己主动登陆还有点问题,等之后解决。
转载请注明出处:http://blog.csdn.net/zhyoulun/article/details/40687545
Yii Framework2.0开发教程(10)配合mysql数据库实现用户登录的更多相关文章
- Yii Framework2.0开发教程(5)数据库mysql性能
继续<Yii Framework2.0开发教程(3)数据库mysql入门> 首先给予一定的尊重yii2数据库支持引进 Yii 基于 PHP's PDO一个成熟的数据库访问层的建立.它提供了 ...
- Yii Framework2.0开发教程(3)数据库mysql入门
沿用教程(2)的代码 第一步.在本地mysql数据库中新建数据库zhyoulun 第二步.在数据库中新建表并插入若干条数据 CREATE TABLE `country` ( `code` CHAR(2 ...
- Yii Framework2.0开发教程(1)配置环境及第一个应用HelloWorld
准备工作: 我用的开发环境是windows下的apache+mysql+php 编辑器不知道该用哪个好.临时用dreamweaver吧 我自己的http://localhost/相应的根文件夹是E:/ ...
- Yii Framework2.0开发教程(2)使用表单Form
第一步.接着教程(1).我们在controllers/ZhyoulunController.php中加入两处, 1) use app\models\EntryForm; 和 2) public fun ...
- Yii Framework2.0开发教程(4)在yii中定义全局变量
在yii中定义全局变量最好的地方是入口脚本处.也就是web目录中的index.php文件 比如我们在defined('YII_ENV') or define('YII_ENV', 'dev');后写上 ...
- 【转】10 个MySQL数据库备份教程推荐
10 个MySQL数据库备份教程推荐 MySQL是动态网站开发中最著名的开源数据库系统.如果你在网站中使用了MySQL,那么你应该定期备份你的数据以防止它丢失. 本文将介绍自动或手动备份MySQL数据 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(七):解决用户上下文(Session)问题
从这篇文章中我们已经了解了微信公众平台消息传递的方式,这种方式有一个先天的缺陷:不同用户的请求都来自同一个微信服务器,这使得常规的Session无法使用(始终面对同一个请求对象,况且还有对方服务器Co ...
- mysql数据库优化课程---10、mysql数据库分组聚合
mysql数据库优化课程---10.mysql数据库分组聚合 一.总结 一句话总结:select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from ...
- 高并发大流量专题---10、MySQL数据库层的优化
高并发大流量专题---10.MySQL数据库层的优化 一.总结 一句话总结: mysql先考虑做分布式缓存,过了缓存后就做mysql数据库层面的优化 1.mysql数据库层的优化的前面一层是什么? 数 ...
随机推荐
- c# winfrom DataGridView使行高不可改变,使列头高度不可改变,
// 禁止用户改变DataGridView1的所有列的列宽 //DataGridView1.AllowUserToResizeColumns = false; //禁止用户改变DataGridView ...
- Python 基金会 —— 模块和包简介
一.模块(Module) 1.模块的作用 在交互模式下输出的变量和函数定义,一旦终端重新启动后,这些定义就都不存在了,为了持久保存这些变量.函数等的定义,Python中引入了模块(Modul ...
- SELECT 场 FROM 表 WHERE 字段 Like 条件
间有关的条件,SQL它提供了四种匹配模式: 1.%: 表示随意0个或多个字符.可匹配随意类型和长度的字符.有些情况下若是中文,请使用两个百分号(%%)表示. 比方 SELECT * FROM [use ...
- WWDC2014开源
A Cocoa OSX App to help you download WWDC2014 videos 地址:https://github.com/iosxtools/WWDC2014 版权声明:本 ...
- Java 内部类分析
一.简介 因为现在是Android开发实习生.发现在发展过程中越来越多,但他们知道什么时候该使用真实的情况,但没有获得,例如,使用内部类,因此,学习和自己的总结后发现,通过互联网的信息,家分享,如有不 ...
- linux下一个php未找到php型材php.ini解决方案
编译并安装自己php经常会遇到这样的问题.我找不到php.ini.对于根据下面的方法可以解决例: 首先是需要解释.假设你php它被编译并安装,那么默认是没有php.ini的,你必须得去复制源代码包内. ...
- 用python做oj上的简单题(持续更新中.......)
本人刚開始接触python,在oj上解一些简单的题,欢迎交流,不喜勿喷. OJ地址链接:acm.sdut.edu.cn http://acm.sdut.edu.cn/sdutoj/showproble ...
- jvm在存储区域
当区域执行的数据 JVM存储器的管理分为几个时间之后的数据区的实施:程序计数器.JavaVM栈.本地方法栈.Java堆.方法区(包括常量池的实现). 程序计数器 较小的内存空间,能够看作是当前线 ...
- M、V、C
概述 Model-View-Controller(MVC),即模型-视图-控制器. MVC将软件系统分成三大部分:Model,View,Controller,三个部分通过某种机制通信 M.V.C的职能 ...
- 将Sublime Text 2搭建成一个好用的IDE(转)
将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime Text 2 ...