1. 程式人生 > >yii框架下的後臺管理員登入操作

yii框架下的後臺管理員登入操作

在搭建好後臺的網頁之後,我們需要實現網頁中的功能,如登入,註冊,記住密碼等等.以下分步進行.

本文使用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'),'
[email protected]
',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
然後在檔案中編寫如下資訊:
<?php

namespace 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程式碼:
<?php
   use 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框架後臺管理員登入操作

在搭建好後臺的網頁之後,我們需要實現網頁中的功能,如登入,註冊,記住密碼等等.以下分步進行. 本文使用yii框架. 後臺管理員的登入: 1,在mysql中建立管理員的資料表; 編寫sql檔案,具體程式碼如下: DROP TABLE IF EXISTS `test_adm

Spring框架管理員登入功能實現

首頁管理員登陸介面如下: 在view——login——Form.js下,寫出登陸頁UI Ext.define('yucen.view.login.Form' ,{ extend: 'Ext.form.Panel',layout:"vbox",url:ctx+'/j_sec

Spring Security實現後臺管理員登入(一)

一、實現功能 二、資料表設計 為了測試方便,這裡建立一個簡單的資料表,只含有name和password兩個欄位。至於角色,許可權等,這裡都先不考慮。 插入一條資料,name為admin,password為e10adc3949ba59abbe56e057f20f883e(

Yii框架的where條件查詢

條件查詢 $customers = Customer::find()->where($cond)->all();  $cond就是我們所謂的條件,條件的寫法也根據查詢資料的不同存在差異,那麼如何用yii2的方式來寫查詢條件呢? [[簡單條件]] // SQL:

springmvc+mybatis框架,寫通用的操作,刪除等的操作

/** * Created by ldz..attack on 2016/11/23 0023. * <p> * 配合mybatis的預編譯想用它做一個通用操作類 * <p> * 目前來看只有:刪除/許可權修改兩種操作用此方法比

yii框架 i18nDemo 模式 網站多種語言切換

1)     在根據yii資料夾中的framework/messages/中找到config.php檔案,並將其複製到api/protected/messages下(如果沒有對應檔案,請自己新建)。 2)     在config.php中設計好你需要的集中語言,例如下面這種

TP框架模型及連貫操作

今天主要講了些TP框架中模型層的操作及概念 首先: 例項化模型層的兩種方法: 一種是用M()函式,另一種是new Model() 來例項化一個物件 模型一共有三類:基礎類,空模型,自定義模型 基礎類:是隻例項化TP框架封裝好的Model類所獲得的模型物件,可以操作基本

yii框架使用redis

就是 hive 運行程序 port ive config brush alias col 1 首先獲取到 yii2-redis-master.zip 壓縮包 下載地址https://github.com/yiisoft/yii2-redis/archive/master.z

【Web篇03】Spring框架,servlet響應的res在jsp頁面中顯示時,防止亂碼的操作

首先,在Spring軟體中,找到Web工程,src下的對應的servlet; 在servlet中獲取請求引數之後,給瀏覽器傳送響應之前; 需要鍵入一段程式碼即可,如下: response.setContentType("text/html;charset=UTF-8"); 括號內的

QT框架的文字操作(一)

簡介 檔案操作作為軟體開發中不可或缺的一環,將其獨立出來並形成一個模組就顯得十分必要。這樣不僅易於維護管理,而且易於在專案中整合。 文字型別 常用的文字型別包括: csv檔案 dbf 檔案 excel 檔案 ini 檔案 json 檔案

微信小程式+java後臺實現登入(java操作

登入,在微信小程式上面稱為當一個使用者使用該小程式,進入到小程式中,我們拿到該使用者的資訊,進行一系列的操作,並記錄下來。 微信小程式與java介面實現登入操作,大致思路如下: 1.微信小程式端通過呼叫對應的api,將對應的變數傳入後臺(code、iv、encr

SSM框架登入頁面,圖片驗證碼,密碼加密對比資料庫資料(二)

登入頁面的Controller的程式碼如下: 在這過程中,需要對填入資料進行判斷,是否為使用者名稱存在?是否密碼有誤?是否驗證碼有誤?如若都沒有錯誤則頁面跳轉至登入成功頁面。 @RequsetMapper("/login.do") public @Respons

SSM框架實現登入註冊

基本配置:jdk1.8   tomcat 8  MyEclipse 先打好地基:                    spring配置檔案 application.xml: <?xml version="1.0" encoding="UTF-8"?&g

linux檢視所有登入使用者的歷史操作命令

最近伺服器出現各種莫名奇怪的問題,可又查不出來到底誰幹的,向度娘一問,給出了下面這位大牛的解決辦法,正是我所欲也! 在linux系統的環境下,不管是root使用者還是其它的使用者只有登陸系統後用進入操作我們都可以通過命令history來檢視歷

Win10用IDEA搭建Struts2+Spring4+Hibernate5(SSH)框架,實現使用者登入註冊

搭建環境: -Win10專業版 -JetBrains IDEA 2017.1.5 -JDK1.8 -MySQL5.7 -Tomcat9 建立SSH工程 開啟IDEA主介面->Create New Project,選擇左邊的Spring,勾選

spring MVC框架前臺往java後臺傳送json資料

前臺頁面 <form action="" method="post" id="loginForm"> <table> <tr> <td&

CentOS後臺執行Python指令碼及關閉指令碼的一些操作

自己寫了一個python指令碼,但是直接遠端用putty連線後#python xxx.py執行,關閉putty指令碼也隨之關閉了,這裡需要用到‘setsid’這個命令。 #setsid python xxx.py 如此即可將指令碼加入到後臺執行 若想檢視所

ssm框架,前臺與後臺的資料互動

ssm框架下,js頁面通過json將資料傳送到後臺,後臺處理之後,再將資料傳送到前臺。 在前臺,要將使用者名稱和郵箱傳送到後臺,先將使用者名稱和和郵箱轉成json形式的資料,在通過ajax傳送到後臺,其中url為後臺要處理資料的地址。前臺主要程式碼如下,其中User是一個實

如何在ssm框架實現攔截器功能,只用登入成功才能訪問其他網頁?

springmvc檔案 <!-- 配置攔截器 --> <mvc:interceptors> <mvc:interceptor> <!-- /**表示所有ur

yii框架中,搜尋的表單和後臺執行,以及分頁

/**      * 管理員搜尋檢視那些課程      * 分頁顯示        * 多條件搜尋      *        */     public function actionSearch(){       //接搜尋傳過來的值       $data=yii::$app->request-&