在搭建好后台的网页之后,我们需要实现网页中的功能,如登录,注册,记住密码等等.以下分步进行.

本文使用yii框架.

后台管理员的登录:

1,在mysql中建立管理员的数据表;

编写sql文件,具体代码如下:
DROP TABLE IF EXISTS `test_admin`;
CREATE TABLE IF NOT EXISTS `test_admin`(
`adminid` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`adminuser` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '管理员帐号',
`adminpass` CHAR(32) NOT NULL DEFAULT '' COMMENT '管理员密码',
`adminemail` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '管理员的邮箱',
`logintime` INT UNSIGNED NOT NULL DEFAULT '0' COMMENT  '管理员登录时间',
`loginip` BIGINT NOT NULL DEFAULT '0' COMMENT '登录IP',
`createtime` INT UNSIGNED NOT NULL DEFAULT  '0' COMMENT '管理员创建时间',
PRIMARY KEY(`adminid`),
UNIQUE test_admin_adminuser_adminpass(`adminuser`,`adminpass`),
UNIQUE test_admin_adminuser_adminemail(`adminuser`,`adminemail`),
)ENGINE-InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test_admin` (adminuser,adminpass,adminemail,createtime) VALUES('admin,'md5('123'),'admin@email.com',UNIX_TIMESTAMP());

可根据实际需要添加字段,在这里涉及不多,以上配置足够使用.

在mysql中使用如下命令:
use 你的数据库;
scoure /你的sql文件存放的地址/*.sql

查看sql表单:

show tables;
select * from test_admin;

查看输出的结果是否创建好我们需要的表单;

2,管理员的登录和退出等操作;

首先我们需要一个登录的页面,这里我们随便引用一个页面的例子:
<div class="content-wrap"><h6>测试管理员登录</h6><input class="span12" type="text" placeholder="管理员账号" /><input class="span12" type="password" placeholder="管理员密码" /><a href="#" class="forgot">忘记密码?</a><div class="remember"><input id="remember-me" type="checkbox" /><label for="remember-me">记住我</label></div><a class="btn-glow primary login" href="index.html">登录</a></div>

我们需要实现以上的帐号密码验证,记住我,登录功能以及忘记密码等功能.

首先,我们需要通过model创建form表单,那么我们需要先修改对应的数据库配置文件的信息.我们在config文件夹中的找到web.php,查看引用的数据库配置文件是哪一个,然后找到对应的db.php.在db.php中修改数据库对应的信息.
可以添加表前缀,配置'tablePrefix' => '你要的表前缀'.至此,引用数据库的文件配置好了.
后台管理员只能在后台登录,为了不混乱前后台,我们在modules中再创建一个models,这样后台与前台的登录不会混乱,我们编写一个新的管理员model文件.
首先我们写一个admin类文件.
vim modules/models/Admin.php

然后在文件中编写如下信息:

<?phpnamespace app\modules\models;
use yii\db\ActiveRecord;class Admin extends ActiveRecord
{public static function tableName(){return "{{%admin}}";}
}

admin类编写完成.

然后在modules中的登录控制器文件中,声明一个:

$model = new Admin;

但是我是在vim编译器中编写的,所以需要在控制器文件中手动引入一个:

use app\modules\models\Admin;

接着继续我们的编写,我们在声明完了$model=new Admin之后,实例化对象后交给模版,继续开始编写:

return $this -> render("login",['model' => $modle]);

现在,我们需要回到一开始我们使用的登录页面模板信息,就是我们一开始找来使用的登录页面代码:

<div class="content-wrap"><h6>测试管理员登录</h6><input class="span12" type="text" placeholder="管理员账号" /><input class="span12" type="password" placeholder="管理员密码" /><a href="#" class="forgot">忘记密码?</a><div class="remember"><input id="remember-me" type="checkbox" /><label for="remember-me">记住我</label></div><a class="btn-glow primary login" href="index.html">登录</a></div>

在这模板一开始的时候,载入一段php代码:

<?phpuse yii\bootstrap\ActiveForm;
?>

载入这个类,这个类可以帮助我们创建form组件.

然后回到下面,通过组件创建:
<div class="row-fluid login-wrapper"><a class="brand" href="index.html"></a><?php $form = ActiveForm::begin(); ?> //开始<div class="span4 box"><div class="content-wrap"><h6>测试管理员登录</h6><input class="span12" type="text" placeholder="管理员账号" /><input class="span12" type="password" placeholder="管理员密码" /><a href="#" class="forgot">忘记密码?</a><div class="remember"><input id="remember-me" type="checkbox" /><label for="remember-me">记住我</label></div><a class="btn-glow primary login" href="index.html">登录</a></div></div><?php ActiveForm::end();?>  //结束

接下来我们需要处理管理员帐号密码的input,注意,我们的输入管理员帐号栏上有一个标签,显示是"adminuser",这个我们暂时不管继续下一步骤,我们等最后统一处理.编写代码:

<div class="row-fluid login-wrapper"><a class="brand" href="index.html"></a><?php $form = ActiveForm::begin(); ?><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" => "管理员密码"]); ?>//<input class="span12" type="text" placeholder="管理员账号" />//<input class="span12" type="password" placeholder="管理员密码" /><a href="#" class="forgot">忘记密码?</a><div class="remember"><input id="remember-me" type="checkbox" /><label for="remember-me">记住我</label></div><a class="btn-glow primary login" href="index.html">登录</a></div></div><?php ActiveForm::end();?>

以及修改checkbox记住我,对于$model来说,她会将数据表中的字段作为$model的属性,而我们需要使用的是checkbox,显然不适合,所以在这里我们需要正对$model创建一个属性,例如rememberMe.

我们需要回到一开始编写的Admin类中声明一个rememberMe:
public $rememberMe = ture;

这样我们就能使用$model创建一个rememberMe的checkbox:

<div class="row-fluid login-wrapper"><a class="brand" href="index.html"></a><?php $form = ActiveForm::begin(); ?><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" => "管理员密码"]); ?>//<input class="span12" type="text" placeholder="管理员账号" />//<input class="span12" type="password" placeholder="管理员密码" /><a href="#" class="forgot">忘记密码?</a><?php echo $form -> field($modle,'rememberMe') -> checkbox(['id' => 'remeber-me','template' => '<div class="remember">{input}<label for="remember-me">记住我</label></div>',]); ?>//<div class="remember">//<input id="remember-me" type="checkbox" />//<label for="remember-me">记住我</label>//</div><a class="btn-glow primary login" href="index.html">登录</a></div></div><?php ActiveForm::end();?>

接下来我们需要做一个submitButton的登录按钮,但是submitButton在Html类当中,所以我们需要载入一个:

use yii\helpers\Html;

接下来我们就能生成一个submitButton:

<div class="row-fluid login-wrapper"><a class="brand" href="index.html"></a><?php $form = ActiveForm::begin(); ?><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" => "管理员密码"]); ?>//<input class="span12" type="text" placeholder="管理员账号" />//<input class="span12" type="password" placeholder="管理员密码" /><a href="#" class="forgot">忘记密码?</a><?php echo $form -> field($modle,'rememberMe') -> checkbox(['id' => 'remeber-me','template' => '<div class="remember">{input}<label for="remember-me">记住我</label></div>',]); ?>//<div class="remember">//<input id="remember-me" type="checkbox" />//<label for="remember-me">记住我</label>//</div><?php echo Html::submitButton('登录',["class" = "btn-glow primary login"]);?>//<a class="btn-glow primary login" href="index.html">登录</a></div></div><?php ActiveForm::end();?>

现在就剩一个问题,就是我们上面说到的输入帐号栏上面有一个标签,输入密码栏上面也有一个标签的问题,我们可以在form的begin中去掉标签,在begin()中写入:

<?php $form = ActiveForm::begin(['fieldConfig' =>['template' => '{input}{error}',]
]); ?>

注意,我在{input}后面加了一个{error},是防止帐号密码输入错误不报错.

3,用户登录操作

在后台登陆控制器的actionLogin中,我们需要添加一个判断,是否接收到login.php中传递过来的账号密码,首先我们先引入yii,在控制器中加入:
use Yii;

然后我们在控制器的actionLogin中加入如下判断:

if(Yii::$app->request->isPost){$post = Yii::$app->request->post();$model ->login($post);
}

如果存在post,就声明一个login方法,把$post数据传递给login.

我们还需要到Admin类中声明一个login方法:
public function rules()
{return [['adminuser','required','message' => '管理员账号不能为空'],['adminpass','required','message' => '管理员密码不能为空'],['rememberMe','boolean'],['adminpass','validatePass'],];
}public function validatePass()
{if(!$this->hasErrors()){$data = self::find() -> where('adminuser = :user and adminpass = :pass',[":user" => $this -> adminuser,":pass" => md5($this->adminpass)])->one();if(is_null($data)){$this->addError("adminpass","用户名或者密码错误");}}
}
public function login($data)
{if($this ->load($data) && $this->validate()){$lifetime = $this->rememberMe ? 24*36000 : 0;$session = Yii::$app->session;session_set_cookie_params($lifetime);$session['admin'] = ['adminuser' => $this->adminuser,'isLogin' =>1,         ];return (bool)$session['admin']['isLogin'];}return false;
}

但是我们没有一个判断.当调用login的时候账号密码是否正确,所以我们要在控制器中加一个判断:

if(Yii::$app->request->isPost){$post = Yii::$app->request->post();if($model ->login($post)){$this ->redirect(['需要跳转的文件的地址']);Yii::$app->end();}
}return $this->render("login",['model' => $model]);

此时已经完成登陆了,但是没有更新登陆的ip和时间,我们只需要在admin类中的login方法中加入一个:

$this ->updateAll(['logintime' => time(),'loginip' => ip2long(Yii::$app->request->userIP)],'adminuser = :user',[':user' =>$this->adminuser]);

4,管理员找回密码(通过邮箱);

未完待续.

yii框架下的后台管理员登录操作相关推荐

  1. SSM框架下对信息执行修改操作时的信息弹窗回显以及对信息修改后对数据库的更新问题

    SSM框架下对信息执行修改操作时的信息弹窗回显以及对信息修改后的同步问题 概括 主要说一下前端的实现 概括 今天在做实训作业时,有个对数据信息进行修改的操作,要求点击修改按钮后弹出修改框,栏目中需要显 ...

  2. admin.php怎么登陆,怎么找回zblogPHP后台管理员登录的密码(两种方法)

    如果你把zblogPHP后台管理员登录的密码忘记了怎么办?如何找回密码呢?为了解决这个问题,刘代码接下来就介绍两种方法. 一.使用[Z-BlogPHP密码找回工具] 这是一款zblog官方开发的大杀器 ...

  3. php后台管理员登录密码错误,如果后台管理员的密码错误,我该怎么办,还有两种找回密码的方法...

    Dedecms是中国著名的网站管理核心. 由于编织梦想简单易用,因此可以进行二次开发,并且可以实现各种网站. 在使用dedecms的过程中,如果忘记了梦想管理后台的密码怎么办?神山个人博客分享了两种修 ...

  4. Yii框架下使用redis做缓存,读写分离

    Yii框架中内置好几个缓存类,其中有memcache的类,但是没有redis缓存类,由于项目中需要做主从架构,所以扩展了一下: /*** FileName:RedisCluster* 配置说明* 配置 ...

  5. yii框架下/asserts文件夹问题

    问题描述: 使用lnmp(linux+nginx+mySQL+php)下yii框架创建应用,屡次出现/asserts文件夹问题.经排查,系统的根目录下需要存在/asserts目录,在应用的lnmp/h ...

  6. Discuz! X3.2后台管理员登录不了的问题

    一. 取消ip认证 1.进入到你自己BBS网站所在的根目录打开文件 config_global.php 找到$_config['admincp']['checkip'] = 1,修改为$_config ...

  7. 修改 wordpress 后台管理员登录地址

    拷贝根目录下的 wp-login.php文件命名为wp-login.php.backup,把原文件重命名为managewp.php sed -i "s/wp-login.php/manage ...

  8. yii框架下使用redis

    1 首先获取到 yii2-redis-master.zip 压缩包  下载地址 https://github.com/yiisoft/yii2-redis/archive/master.zip 2 把 ...

  9. 微服务商城系统 实战记录 用户、商家、后台管理员注册与登录功能实现

    代码见 https://github.com/betterGa/ChangGou 文章目录 一.用户注册 1.使用 ajax (POST 方法) 2.使用 thymeleaf 3.解决跨域问题 二.用 ...

最新文章

  1. python macd背离_Python 精简多品种 MACD 趋势策略
  2. 在子线程中弹土司的一段代码
  3. int main(int argc,char* argv[])详解(原)
  4. lodsb、stosb(和lodsw、stosw和lodsd、stosd指令)
  5. Leetcode 206. 反转链表 解题思路及C++实现
  6. oracle 临时文件 大文件,Oracle中临时文件File#和Db_files关系
  7. python3 + flask + sqlalchemy +orm(3):多对多关系
  8. react-踩坑记录——swiper报错!
  9. softmax ce loss_从Softmax到AMSoftmax(附可视化代码和实现代码)
  10. 用UltraISO刻录CDDVD系统光盘的图文教程
  11. qtdesigner设计表格_使用Qt Designer进行布局
  12. c语言对整形indexing,C语言运算符另类分类法
  13. 这些好玩的 GitHub 项目,你知道几个?
  14. 使用Outlook发送邮件自定义发件人
  15. shell script if嵌套for循环脚本
  16. Spring到底是什么
  17. python验证角谷_角谷猜想-随心随性无为而为-51CTO博客
  18. STM32+HC-05蓝牙模块学习与使用
  19. jmf608硬盘修复_JMF608固态硬盘主控 SSD套料 SSD电路板 SATA3 封装BGA152|TSOP48
  20. vue中使用echarts词云

热门文章

  1. Java中Lambda表达式的使用
  2. LeetCode 51. N 皇后、52. N 皇后 II
  3. onlyoffice 毕升文档部署
  4. transaction 2 failed while formatting outputs from RPC
  5. Visual Word Ambiguity(一妻多夫,妇女解放)
  6. 【Cloudaily】谷歌Cloud Spanner Beta测试启动,阿里云参与共建国家工程实验室
  7. Contest3032 - 计科2101~2104算法设计与分析上机作业03
  8. 《战胜华尔街》精华 - 彼得·林奇的25条投资法则
  9. java hbase 查询优化_HBase的优化
  10. 关于Solidworks2020无法更改中文的问题解决