當前位置:名人名言大全網 - 短信平臺 - thinkphp 怎麽做登錄驗證

thinkphp 怎麽做登錄驗證

登錄無非就是驗證用戶名密碼以及驗證碼是否正確,我們可以新建壹個CommonAction的公***類,用來校驗權限,其他所有類繼承此類。該類內部寫壹個初始化方法,用於驗證,這壹講先不詳細講解。繼續說登錄,由於登錄是公開模塊的方法,所以可以新建壹個PublicAction類,用於公***的免驗證方法,同時在配置文件中添加

'NOT_AUTH_MODULE'=>'Public',//默認不需要認證的模塊

'USER_AUTH_GATEWAY'=>'/Public/login',//默認的認證網關

然後開始編寫Public類,具體代碼如下:

<?php

classPublicActionextendsCommonAction{

//驗證碼顯示

publicfunction verify(){

import("ORG.Util.Image");

Image::buildImageVerify(4,1,"png",100,28,"verify");

}

//驗證是否賬號密碼

function checklogin(){

//此處多余可自行改為Model自動驗證

if(empty($_POST['username'])){

$this->error('帳號錯誤!');

}elseif (empty($_POST['password'])){

$this->error('密碼必須!');

}elseif (empty($_POST['verify'])){

$this->error('驗證碼必須!');

}

$map=array();

$map['username']=$_POST['username'];

$map['status']=array('gt',0);

if($_SESSION['verify']!= md5($_POST['verify'])){

$this->error('驗證碼錯誤!');

}

import('ORG.Util.RBAC');

//C('USER_AUTH_MODEL','User');

//驗證賬號密碼

$authInfo=RBAC::authenticate($map);

if(empty($authInfo)){

$this->error('賬號不存在或者被禁用!');

}else{

if($authInfo['password']!=md5($_POST['password'])){

$this->error('賬號密碼錯誤!');

}else{

$_SESSION[C('USER_AUTH_KEY')]=$authInfo['id'];//記錄認證標記,必須有。其他信息根據情況取用。

$_SESSION['email']=$authInfo['email'];

$_SESSION['nickname']=$authInfo['nickname'];

$_SESSION['user']=$authInfo['username'];

$_SESSION['last_login_date']=$authInfo['last_login_date'];

$_SESSION['last_login_ip']=$authInfo['last_login_ip'];

//判斷是否為超級管理員

if($authInfo['username']=='admin'){

$_SESSION[C('ADMIN_AUTH_KEY')]=true;

}

//以下操作為記錄本次登錄信息

$user=M('User');

$lastdate=date('Y-m-d H:i:s');

$data=array();

$data['id']=$authInfo['id'];

$data['last_login_date']=$lastdate;

$data['last_login_ip']=$_SERVER["REMOTE_ADDR"];

$user->save($data);

RBAC::saveAccessList();//用於檢測用戶權限的方法,並保存到Session中

$this->assign('jumpUrl',.'/Index/index');

$this->success('登錄成功!');

}

}

}

//退出登錄操作

function logout(){

if(!empty($_SESSION[C('USER_AUTH_KEY')])){

unset($_SESSION[C('USER_AUTH_KEY')]);

$_SESSION=array();

session_destroy();

$this->assign('jumpUrl',/Code.'/login');

$this->success('登出成功');

}else{

$this->error('已經登出了');

}

}

}

以上代碼僅實現功能,沒有做優化,有些驗證的操作可以放到model,session也不用壹 壹賦值,用數組即可,我想已經入門的應該可以自己改的更好。