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

效果如下所示

点击登陆按钮后

若账号密码不正确

自动登陆还有点问题,等之后解决。

转载请注明出处:http://blog.csdn.net/zhyoulun/article/details/40687545

时间: 2024-10-07 09:35:21

Yii Framework2.0开发教程(10)配合mysql数据库实现用户登录的相关文章

Yii Framework2.0开发教程(5)数据库mysql性能

继续<Yii Framework2.0开发教程(3)数据库mysql入门> 首先给予一定的尊重yii2数据库支持引进 Yii 基于 PHP's PDO一个成熟的数据库访问层的建立.它提供了一个统一的 API 并且克服了许多不同的 DBMS 违禁使用. Yii 默认支持下面 DBMS : MySQL MariaDB SQLite PostgreSQL CUBRID: version 9.1.0 or higher. Oracle MSSQL: version 2012 或更高版本号,如需使用 L

Yii Framework2.0开发教程(5)数据库mysql函数

继续<Yii Framework2.0开发教程(3)数据库mysql入门> 首先给一些关于yii2数据库支持的介绍 Yii 基于 PHP's PDO建立了一个成熟的数据库访问层.它提供统一的 API 并解决了一些不同 DBMS 产生的使用不利. Yii 默认支持以下 DBMS : MySQL MariaDB SQLite PostgreSQL CUBRID: version 9.1.0 or higher. Oracle MSSQL: version 2012 或更高版本,如需使用 LIMIT

Yii Framework2.0开发教程(3)数据库mysql入门

沿用教程(2)的代码 第一步.在本地mysql数据库中新建数据库zhyoulun 第二步.在数据库中新建表并插入若干条数据 CREATE TABLE `country` ( `code` CHAR(2) NOT NULL PRIMARY KEY, `name` CHAR(52) NOT NULL, `population` INT(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `country

Yii Framework2.0开发教程(6)数据库mysql--ActiveRecord

Active Record(活动记录,以下简称AR)提供了一个面向对象的接口,用以访问数据库中的数据. 一个AR 类关联一张数据表,每个 AR 对象对应表中的一行,对象的属性(即 AR 的特性Attribute)映射到数据行的对应列. 一条活动记录(AR对象)对应数据表的一行,AR对象的属性则映射该行的相应列. 您可以直接以面向对象的方式来操纵数据表中的数据,妈妈再不用担心我需要写原生 SQL 语句啦. 编辑models/Country.php <?php namespace app\model

Yii Framework2.0开发教程(8)输入验证

validate() 方法,在幕后为执行验证操作.先看一个简单的例子,例子的代码在<Yii Framework2.0开发教程(2)使用表单Form>. 类ZhyoulunController中函数actionEntry() ,其中有一句$model->validate(),就是来判断输入的名字和电子邮件是否正确. 修改models/EntryForm.php <?php namespace app\models; use yii\base\Model; class EntryFor

Yii Framework2.0开发教程(4)在yii中定义全局变量

在yii中定义全局变量最好的地方是入口脚本处.也就是web文件夹中的index.php文件 例如我们在defined('YII_ENV') or define('YII_ENV', 'dev');后写上 defined('ZYL_HEHE') or define('ZYL_HEHE','zhyoulun-hehe'); 并在我们教程(1)中建立的views/zhyoulun/helloworld.php文件中写上 <?php echo 'hello world!'; //全局变量 echo co

Yii Framework2.0开发教程(7)账户注册开发

注册的过程:用户输入数据->提交服务器->插入数据库 由于AR继承自[[yii\base\Model]],所以它同样也支持Model的数据输入.验证等特性.例如,你可以声明一个rules方法用来覆盖掉[[yii\base\Model::rules()|rules()]]里的:你也可以给AR实例批量赋值:你也可以通过调用[[yii\base\Model::validate()|validate()]]执行数据验证. 当你调用 save().insert().update() 这三个方法时,会自动

【转】10 个MySQL数据库备份教程推荐

10 个MySQL数据库备份教程推荐 MySQL是动态网站开发中最著名的开源数据库系统.如果你在网站中使用了MySQL,那么你应该定期备份你的数据以防止它丢失. 本文将介绍自动或手动备份MySQL数据库的10个教程,看看有没有最适合你的方法. 1.Backing Up Using MySQLDump(利用MySQLDump备份MySQL数据库) 可以使用MySQL自带的mysqldump工具来备份数据.在mysqldump中提供了许多的示例,包括如何将数据库备份到一个文件.另一个服务器,甚至gz

Python+Django+SAE系列教程12-----配置MySQL数据库

因为SAE上支持的是Mysql,首先我们要在本地配置一个Mysql的环境 ,我在网上找到MySQL-python-1.2.4b4.win32-py2.7.exe,并双击 安装 选择典型安装 安装结束后,会弹出配置数据库的界面 : 然后输数据管理员密码: 最后是运行服务. 这个过程并不复杂,安装完成Mysql以后,系统会启动数据库服务,由于Mysql是用命令行控制的,想我这样懒的 人还是需要借助一个可视化 工具来管理,我选择MySQL-Front. 在网上找到MySQL_Front_Setup.1