'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也不用壹 壹賦值,用數組即可,我想已經入門的應該可以自己改的更好。