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数据库层的优化的前面一层是什么? 数 ...
随机推荐
- GotoTest
循环标签跳出循环 public class GotoTest { public static void main(String[] args) { int[][] array={ {1,20,3}, ...
- zoj 2156 - Charlie's Change
称号:拼布钱,表面值至1,5.10.25.寻求组成n表面值硬币的最大数目. 分析:dp,01背包.需要二元分割,除此以外TLE.使用每个硬币的数组记录数.轻松升级. 写了一个 多重背包的 O(NV)反 ...
- C#设计及其UML(反向工程)
OOP之C#设计及其UML(反向工程) 现在总结一下C#类关键字(virtual.abstract.override.new.sealed)的使用(以C#代码体现),并再次熟悉一下OOP思想,使用 ...
- 开发随笔——NOT IN vs NOT EXISTS
原文:开发随笔--NOT IN vs NOT EXISTS 原文出处: http://blog.csdn.net/dba_huangzj/article/details/31374037 转载请引用 ...
- JSTL实现int数据的类型的长度
JSTL否int类型转换string该功能.为了解决增益int数据的类型的长度,闹失踪. 得到String的数据的长度是jstl的fn能够${fn:length(string)},但int做数据? 经 ...
- 建立ORACLE10G DATA GUARD--->Physical Standby
下面是我自己建Physical Standby,按照下面的步骤一步我一步,当然,打造成功,以下步骤可以作为建筑物Data Guard结构操作手册. HA和DG差额:HA:可以做IP切换自己主动 DG ...
- android从中国天气网获取天气
http://download.csdn.net/detail/sun6223508/8011669 里面的一切..可完全移植 版权声明:本文博主原创文章.博客,未经同意不得转载.
- CentOS 忘记 root password处理
在倒计时启动时间,按任意键进入,例如下面的页面 输入 e. 进入这个页面.上下移动至高亮条到中间 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29yZV ...
- iOS一个开发系列中 - UIButton 使用摘要
// 初始化button并设置类型 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // 可以定义的UIButto ...
- NSIS API 函数常用备份
原文:NSIS API 函数常用备份 关闭程序: System::Call `user32::AnimateWindow(i$HWNDPARENT,i200,i${AW_BLEND}|${AW_HID ...