thinkphp5.3 のソース コード スタディをインターネットからダウンロードしました。インストール ファイルがないため、データベースのインポートを通じてのみインストールできます。データベースをインポートし、データベース接続ファイルを構成した後、 phpmydmin の admin テーブル。
admin:adminpassword:12eefdf664f0e07e65a2c35e01e98d29パスワードを復号化し、クリアテキストのパスワードを取得しました: o8889tソースにログインするときコード バックエンドでは、間違ったパスワードまたはアカウント番号の入力を求めるプロンプトが表示され続けます。その後、管理テーブルのパスワードを e10adc3949ba59abbe56e057f20f883e に変更しました。プレーン テキストは: 123456 再度ログインしても、アカウントがまたはパスワードが間違っています バックエンドパスワードの暗号化方式を知りたいです。または、バックグラウンドで正常にログインするにはどうすればよいですか? 3つのファイルがリストされています。アドバイスをお願いします。よろしくお願いします。 バックエンド ログイン AdminController.class.php コードは次のとおりです: ------------------------------------- -------------------------------------------------- -- ----<?phpnamespace Admin\Controller;use Think\Controller;class IndexController extends Controller{ public functionindex() {layout(false); $this->display();} //Login public function loginin() { layout(false); if(I('post.adminuser') and I('post.adminpwd')) { $adminuser=I('post.adminuser') ; $adminpwd=I('post.adminpwd'); //アカウント番号を覚えてください $remember=I('post .remember' ); if(!empty($remember)) { cookie('remember',$remember,3600*24*30); cookie('loginname',$adminuser,3600*24*30); cookie('loginpwd',$adminpwd,3600*24*30); } else { cookie('remember',null); cookie('loginname',null); cookie('loginpwd',null);
} $auth=I('post.auth'); $verify = new \Think\Verify(); $res =$verify->check($auth, ''); if($res==false) { $this->gt; assign(' エラー','確認コードが間違っています! '); $this->display('index'); exit(); } $admin=new \Admin \Model\AdminModel(); $res=$admin->where("adminname='$adminuser'")->find(); if($res) { $status=$res['status']; if($status==0) {
$this->assign('error','この管理者は無効になっています!');
$this->display('index');
exit ( );
}else {
$password=$res['password'];
//MD5 暗号化
$pwd=$admin - >encrypt($adminpwd);
if($password!=$pwd)
{
$this->assign('error','ユーザーが間違っています名前またはパスワード!');
$this->display('index');
exit();
}else {
# # //管理者グループが無効かどうかを確認します $group_id=$res['group_id']; $AdminGroup=new \Admin\Model\AdminGroupModel(); $res_g=$AdminGroup->where("id=$group_id")->field('status')->find(); if($res_g['status'] = ='1') { //ログインステータスを更新 $ip=getIP(); $login_num=$res[' login_num '] 1; $data=array( 'last_login_time'=>date('Y-m-d H:i:s'), 'last_login_ip'= > ;$ip, 'login_num'=>$login_num ); $res2=$admin->where("adminname='$adminuser' " )->save($data); if($res2) { //ユーザー SESSION $_SESSION[' admin_id を保存']=$res['uid']; $_SESSION['a_group_id']=$res['group_id']; //ページにジャンプ $ this->redirect('System/index'); }else { $this->assign('error','ログインに失敗しました! '); $this->display('index'); } }else { $this->assign( 'error','あなたが所属している管理者グループは無効になっています!'); $this->display('index'); exit(); } } } }else { $this->assign('error','この管理者は存在しません! '); $this->display('index'); } }else { $this->assign( 'error','アカウント番号とパスワードを空にすることはできません!'); $this->display('index'); } }//ログアウト public関数loginout() { $_SESSION['admin_id']=null;
$_SESSION['a_group_id']=null;
//ページに移動
$this->redirect('Index/index');
}
//検証コードを生成
public function verify()
{
ob_end_clean();
$config = array(
'expire' => 1800, // 検証コードの有効期限 (秒)
'useImgBg' => false, //背景画像を使用します
'fontsize' = & gt; 10, // コードのフォント サイズ (PX) を確認します
'usecurve' = & gt; // 混同曲線を描画するかどうか
'usenoise '= & Gt; false, // その他の点を追加するかどうか
' Imageh '= & GT; 30, // 認証コード画像の高さ
' Imagew '= & gt; 80, // 検証コード 画像幅
'length' = & gt; 4, // 検証コード番号
'fontttf' = & gt
' bg' => array(243, 251, 254), // 背景色
);
$verify=new \Think\Verify($config );
/**
* 認証コードを出力し、認証コードの値をセッションに保存します
* 認証コードをセッションに保存する形式は次のとおりです: array('verify_code' => '認証コードvalue', 'verify_time' => '検証コード作成時刻');
**/
$verify->entry();
}
}
------ ------------------------------------------ -------- ------------------------------------------ -------- ------------------------------------------ -------- ----
2 番目のファイル AdminController.class.php コードは次のとおりです:
-------------- ------- -------------------------------------- ------- -----------
#<?php#/**
* 管理者管理
*/
名前空間 Admin \Controller;
Use Admin\Common\Controller\AuthController;
クラス AdminController は AuthController を拡張します
{
パブリック関数 Index()
{
if(I('get.search'))
{
$search=I('get.search');
$where="adminname='$search' または email='$search' または Telephone='$search'";
}
if(I('get.group_id '))
{
$group_id=I('get.group_id');
$where="group_id='$group_id'";
}
if(I('get.group_name'))
{
$group_name=I('get.group_name');
$res_ag=D('AdminGroup')->where("title='$group_name'")->field('id')->find();
$group_id=$ res_ag['id'];
$where="group_id='$group_id'";
}
if(I('get.search')== '' and I('get.group_id')=='' and I('get.group_name')=='')
{
$where='1';
}
$Admin=new \Admin\Model\AdminModel();
$count=$Admin->where($where)->count() ;
$per = 15;
if($_GET['p'])
{
$p=$_GET['p' ];
}else {
$p=1;
}
$Page= new \Think\Page($count,$per) ;// 实例化分页类送入总记录数と每页表示の记录数(25)
$Page->rollPage=10; // 分页栏每页表示の页数
$Page -> setConfig('header','共%TOTAL_ROW%条');
$Page -> setConfig('first','首页');
$Page -> setConfig('last','共%TOTAL_PAGE%页');
$Page -> setConfig('prev','上一页');
$Page -> setConfig('next','下一页');
$Page -> setConfig('link','indexpagenumb');//pagenumb 会替成页码
$Page -> setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% 第 '.I('p',1).' 页/共 %TOTAL_PAGE% 页 (<font color="red ">'.$per.'</font> 条/页 共 %TOTAL_ROW% 条)');
$show= $Page->show();// 分页显示输出
$adminlist = $Admin->where($where)->page($p.','.$per)->select();
$this->assign('alist',$adminlist);// 赋值データ集
$this->assign('page',$show);
$ this->display();
}
//新增管理员
public function add()
{
//管理者グループのリストを取得します
$group=new \Admin\Model\AdminGroupModel();
$grouplist=$group->getGroupList2();
$this->assign('glist',$grouplist);
if(I('post.'))
{
if(I ('post.adminname'))
{
$adminname=I('post.adminname');
$Admin=new \Admin\Model\AdminModel( );
$res=$Admin->where("adminname='$adminname'")->find();
if($res)
{
$str='Xこのユーザー名はすでに存在します';
echo $str;
exit();
}else {
$str='';
$a='a';
}
}
if( I('post.password') および I('post.password2'))
{
$password=I('post.password');
# # $ password2=I('post.password2'); if (strlen($password2)<=5) { $str='X パスワード 以上6 文字未満'; echo $str; exit(); }else { if($password!=$password2 ) { $str='X2 つのパスワードは同じではありません'; echo $str; exit(); }else { $str=''; $a.='a'; } }}
if(I('post.email'))
{
$email=I('post.email');
if(is_email($email))
{
$str='';
}else {
$str = 'X メールの形式が正しくありません';
echo $str;
exit();
}
}
if(I('post.phone'))
{
$phone=I('post.phone');
if(is_phone ( $phone))
{
$str='';
}else {
$str='X 携帯電話番号の形式が正しくありません' ;
echo $str;
exit();
}
}
if($ a =='aa')
{
$adminname=I('post.adminname');
$password2=I('post.password2');
//MD5 暗号化
$pwd=$Admin->encrypt($password2);
$email=I('post.email');
$phone=I('post.phone');
$group_id=I('post.group_id');
$status=I('post.status') ;
$register_time=date('Y-m-d H:i:s');
//php获取ip的算法
$ip = ($_SERVER["HTTP_VIA "])? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
$ip = ($ip) ? $ip : $_SERVER["REMOTE_ADDR"];
$data=array(
'adminname'=>$adminname,
'password'=>$ pwd,
'email'=>$email,
'phone'=>$phone,
'province'=>trim(I('post .province')),
'city'=>trim(I('post.city')),
'group_id'=>$group_id,
'status'=>$status,
'register_time'=>$register_time,
'register_ip'=>$ip,
'last_login_time'= >date('Y-m-d H:i:s')
);
$res=$Admin->add($data);
if($ res)
{
echo '1';
}else {
echo '0';
}
}
}else {
$this->display();
}
}
//輖辑管理员
public function edit($uid)
{
//获取管理员情報
$Admin= new \Admin\Model\AdminModel();
$aMsg=$Admin->getAdminMsg($uid);
$this->assign('msg',$aMsg) ;
//获取管理员組列表
$group=D('admin_group');
$grouplist=$group->getGroupList2();
$this->assign('glist',$grouplist);
if(IS_POST)
{
// var_dump(I('post.'));exit;
if(I('post.adminname'))
{
$adminname=I('post .adminname');
$res=$Admin->where("adminname='$adminname' and uid!='$uid'")->find();
if($res)
{
$error='X该用户名已在';
$this->assign('error',$error );
$this->display();
exit();
}
}
$email=I('post.email');
if($email)
{
if(is_email($email)!==true)
{
$error1='X邮箱格式不正确';
$this->assign('error1',$error1);
$this->display();
exit();
}
}
$phone=I('post.phone');
if($phone)
{
if(is_phone($phone)!==true)
{
$error2='X手机番号番号格式不正确';
$this- >assign('error2',$error2);
$this->display();
exit();
}
}
$group_id=I('post.group_id');
$login_num=I('post.login_num');
$status=I('post .status');
$data=array(
'adminname'=>$adminname,
'email'=>$ email,
'phone'=>$phone,
'province'=>trim(I('post.province')),
'city' =>trim(I('post.city')),
'group_id'=>$group_id,
'login_num'=>$login_num,
'status'=>$status,
);
if(I('post.password'))
{
$password =I('post.password');
//MD5加密
$pwd=$Admin->encrypt($password);
$data['パスワード']=$pwd;
}
$res=$Admin->where("uid=$uid")->save($data);
if($res!==false)
{
layout(false);
$this->success('编辑管理员成功!', U('index'),3);
}else {
layout(false);
$this->error('操作ミス败!');
}
}else {
$this->display();
}
}
## //修改管理员禁用状態态 public functionchangestatus($id,$status) { $data=array( 'status'=>$status ); $Admin=new \Admin\Model\AdminModel(); $res=$Admin ->where("uid=$id")->save($data); if($res===false) { echo '0'; }else { echo '1'; } }
//管理者を削除
public function del($id)
{
$Admin=new \Admin\Model\AdminModel ( );
$res=$Admin->where("uid=$id")->delete();
if($res===false)
{
echo '0';
}else {
echo '1';
}
}
//パスワードの変更
public functionchangepwd()
{
if($_SESSION['admin_id']! = '')
{
$admin_id=$_SESSION['admin_id'];
if(I('post.'))
{
$oldpwd=I('post.oldpwd');
if($oldpwd=='')
{
$this- > ;assign('error1','元のパスワードを空にすることはできません!');
$this->display();
exit();
}
$pwd1=I('post.pwd1');
$pwd2=I('post.pwd2');
if($pwd1=='' )
{
$this->assign('error2','新しいパスワードを空にすることはできません!');
$this->display() ;
exit();
}
if($pwd2=='')
{
$this-> ; assign('error3','繰り返しパスワードを空にすることはできません!');
$this->display();
exit();
}
if($pwd1==$pwd2)
{
if(strlen($pwd2)>5)
{
# # //元のパスワードが正しいかどうかを確認します $Admin=new \Admin\Model\AdminModel(); $res=$Admin->checkPwd($admin_id,$oldpwd) ); if($res) { //パスワードの変更 $newpwd=$Admin->encrypt($pwd2);$data=array( 'パスワード'=>$newpwd ); $res2=$Admin->where(" uid=$ admin_id")->save($data); レイアウト(false); if($res2===false) { $this->error('パスワードの変更に失敗しました! '); }else { } $this->success('パスワード編集成功!'); } }else { $this->assign('error1','元のパスワードが間違っています!'); $this->display(); exit() ;# ##### }###### }それ以外 {###
$this->assign('error3','新しいパスワードの長さは 5 文字以上である必要があります!');
$this->display();
exit( );
}
}else {
$this->assign('error3','2 つのパスワードは同じではありません!') ;
$this->display();
exit();
}
}else {
$this ->display() ;
}
}else {
$this->redirect('Index/index');
}
}
}
---------------------------- ------------------ -------------------------------- ------------------ -------------------------------- --------------------------------------
3 番目のファイルは次のとおりです:
<?php
namespace Admin\Common\Controller;
use Think\Controller;
use Think\ Auth;
//権限認証
class AuthController extends Controller {
protected function _initialize(){
//Whenセッションが存在しません。直接アクセスは許可されていません
#if(!$_SESSION ['admin_id']){layout(false);$this->error('まだログインしていません。ログイン ページにジャンプします', U('インデックス/インデックス'));} //セッションが存在する場合、検証は必要ありません$not_check = array ( 'Admin/changepwd','System/index','System/index_show','System/cleancache ','System/clearrubbish',//パスワード変更、システムホームページ、'ArticleCat/deloldimg','Article/deloldimg','Article/deloldbigimg','Article/deloldfile',//削除記事カテゴリの元の画像、記事の元の画像を削除、記事の元の大きな画像を削除、記事の元のファイルを削除'GoodsCat/deloldimg',//元の画像を削除製品カテゴリの);//現在の操作のリクエスト モジュール名/メソッド名if(in_array(CONTROLLER_NAME.'/ '.ACTION_NAME, $not_check)){return true;}$auth = new Auth() ;if(!$auth->check(CONTROLLER_NAME.'/'.ACTION_NAME,$_SESSION['admin_id']) および $_SESSION[' a_group_id']!='1'){layout(false);echo '許可がありません!';die(); $this->error('許可がありません') ;}}}
解決しました、ありがとうございます