前言:做后台管理的首要任务当然是登陆、注册;就yii来说,它为我们封装好了用户的验证方法,验证过程,所以,我们要做的就是模仿,既然接触了这个框架,就要照这个框架来思考,也就是Tink in YII,用自身的验证而不自己验证的方法有以下几点好处:
一、为什么推荐你用自带的登陆?
yii2.0框架为我们封装好了用户的信息;
比如:
\Yii::$app->user->isGust
判断是否为访客
Yii::$app->user->identity
这是一个登陆用户的信息;里面包括了当前登录用户的全部信息(user数据表中所有的字段);登录后可以自行 var_dump去打印查看;
比如获取当前用户名:
Yii::$app->user->identity->username
获取当前用户的ip:Yii::$app->user->identity->login_ip
所以,我们不用费劲的去编写象下面的这样一个数组去判读
[IsLogin=>1,Username=>’李华’]自带csrf,和密码加密技术bcrypt加密方式,php自带的crypt函数去加密成的hash值;bcrypt 哈希是公认加密程度较好的加密方式(相对于md5和sha1来说,有破解md5的彩虹表不是说这种加密方式不安全,可自行google)。
就实现来说:这只是基本,登录搞不定,可以说用yii开发就寸步难行,大神除外,自己定义框架实现的除外。这是一个流程,登录后很多控制器方法都要求去用”是不是访客”去判断;
所以我们还是乖乖用这种方式,去习惯、理解Yii框架的运作方式;闲话休说,我带大家一步一步的分析源码和流程;
二、我们讲后台如何通过邮箱和用户名完美登录?
步骤一:前后端登录分离;
- . 默认生成的前端用户表的model在common>models文件夹下面
User.php;我们要做的就是copy一份;重命名为AdminUser.php,并且把类名改为AdminUser作为我们的后台用户表的model部分
. 分别去到frontend和backend下面的config>main.php中配置登录
的session和cookie
'components' => [
'request' => [
'csrfParam' => '_csrf-backend',
],
'user' => [
//重点是这,配置验证用户的类是AdminUser;也就是后台用户表
'identityClass' => 'common\models\AdminUser',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
],
'session' => [
'name' => 'advanced-backend',
],
这一步是为了彻底区分前后台,前台有前台的cookie和session;后台有后台的cookie和session前台把backend改为frontend就好,
千万别少了session这个配置
步骤二:后台管理员表adminuser的建立,(我们这次采取命令行的方式,也可以自己创建sql);
1. 自己建表的注意 console>migrations
这个文件夹有用户表的结构,照着这个字段去建,并且上面的一个字段都别少,都有用;
2.用命令行比较方便,我介绍下:(刚接触框架的建议跳过)
位置:console>migrations下面就是表的数据文件;下面我们就用命令
行来建表,win下面调用win+R进入cd项目目录
D:\wamp\wamp64\www\site\angular>
输入:yii migrate/create adminuser
Yii Migration Tool (based on Yii v2.0.10)
Create new migration 'D:\wamp\wamp64\www\site\angular\console/migrations\m161127_162856_ad
minuser.php'? (yes|no) [no]:
输入:yes
New migration created successfully.
命令行中console中进入到项目输入
yii migrate/create adminuser
这个命令就是新建adminuser表
的控制台模型(不起作用了在前面加php)
这时候会在console>migrations
下出现一个文件类似
这样m161127_162856_adminuser.php
的文件,
我们可以在 这个文件中新建我们的表模型;
我们copy上一个存在的user表模型;
class m161127_162856_adminuser extends Migration(这里千万别改,只copy里面的方法就行)
{
public function up()
{
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
}
$this->createTable('{
{%adminuser}}', [
'id' => $this->primaryKey(),
'username' => $this->string()->notNull()->unique(),
'auth_key' => $this->string(32)->