>  Q&A  >  본문

TP5 백엔드에 로그인할 수 없습니다. 조언 부탁드립니다. 감사합니다.

thinkphp5.3의 소스코드를 학습하기 위해 인터넷에서 다운로드했는데, 설치 파일이 없기 때문에 데이터베이스 가져오기를 통해서만 설치할 수 있습니다. 데이터베이스를 가져오고 데이터베이스 연결 파일을 구성한 후

admin:admin을 찾으세요. phpmydmin의 관리 테이블

password:12eefdf664f0e07e65a2c35e01e98d29

비밀번호를 복호화하여 일반 텍스트 비밀번호를 얻었습니다: o8889t

소스 코드 백그라운드에 로그인하면 비밀번호나 계정이 잘못되었다는 메시지가 계속 표시되고 그 다음에는 관리자 테이블의 비밀번호를 e10adc3949ba59abbe56e05 7f20f883e로 변경했습니다. 일반 텍스트는 123456

again입니다. 로그인해도 여전히 계정이나 비밀번호가 잘못된 것으로 나타났습니다. 백엔드의 비밀번호가 어떤 암호화 방법을 사용하는지 알고 싶습니다. 아니면 어떻게 백그라운드에 성공적으로 로그인할 수 있나요? 세 개의 파일이 나열되어 있습니다. 조언을 부탁드립니다. 정말 감사합니다.

백엔드 로그인 AdminController.class.php 코드는 다음과 같습니다.

----------------------------------- -------------- ---------- --------------

< ?php

namespace AdminController;

ThinkController 사용;

class IndexController는 Controller를 확장합니다

{

공용 함수 index()

{

레이아웃(false);

this $ ->display();

}

//Login

공개 함수 loginin()

{

레이아웃(false);

if(I( 'post.adminuser') 및 나('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('기억', null);

cookie('loginname',null);

cookie('loginpwd',null);

}

$auth=I('post.auth');

$verify = new ThinkVerify();

$res=$verify->check($ auth, '');

if($res==false)

{

$this->sign('error',' 인증번호가 올바르지 않습니다! ');

$this->display('index');

exit();

}

$admin=new AdminModelAdminModel();

$res=$admin->where("adminname ='$adminuser'")->find();

if($res)

{

$status=$res['status'];

if($status==0)

{

$this->sign('error','이 관리자는 비활성화되었습니다!');

$this->display('index');

exit();

}else {

$ 비밀번호=$res['password'];

//MD5 암호화

$pwd=$admin->encrypt($adminpwd);

if($password!=$pwd)

{

$ this ->할당('오류','사용자 이름 또는 비밀번호가 잘못되었습니다!');

$this->display('index');

exit();

}else {

//판단 관리자 그룹이 비활성화되었습니다

$group_id=$res['group_id'];

$AdminGroup=new AdminModelAdminGroupModel();

$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'=> ($res2)

{

//사용자 저장 SESSION

$_SESSION['admin_id']=$res['uid'];

$_SESSION['a_group_id'] =$res['group_id'];

//페이지 이동

$this->redirect('System/index');

}else {

$this->ass('error',' 로그인 실패! ');

$this->display('index');

}

}else {

$this->ass('error','당신이 속한 관리자 그룹이 비활성화되었습니다!' ;

' 관리자가 존재하지 않습니다! ');

$this->display('index');

}

}else {

$this->ass('error','Account 숫자와 비밀번호는 비워둘 수 없습니다! ');

$this->display('index');

}

}

//로그아웃

공개 함수 loginout()

{

$_SESSION['admin_id']=null;

S $ _Session ['a_group_id'] = null;

// 페이지 이동

$ this- & gt; verify('Index/Index')

{

ob_end_clean();

$config = array(

'expire' => 1800, // 인증코드 만료 시간(초)

'useImgBg' => false, // 배경 이미지 사용

                                  ~        // 인증 코드 글꼴 크기(px) > false, // 노이즈 추가 여부

                                                                                                                                 gt; 4,               // 인증 코드 자릿수

'fontttf' => '5.ttf', '5.ttf', //인증 코드 글꼴, 무작위 획득 설정

'bg' => array(243, 251, 254), //배경색

) ;

$verify=new ThinkVerify($config);

/**

* 세션에 인증코드 출력 및 인증코드 값 저장

* 세션에 인증코드 저장 형식은 array('verify_code' => '인증코드 값', 'verify_time' 입니다. => '인증코드 생성시간');

**/

$verify->entry();

}

}

--------- ------------ ------------ ------------ ------------ ------------ ------------ ---

두 번째 파일인 AdminController.class.php 코드는 다음과 같습니다.

------ ----------------------------- -------- ---------------- -

<?php

/**

*관리자 관리

*/

네임스페이스 AdminController ;

use AdminCommonControllerAuthController;

class AdminController는 AuthController를 확장합니다

{

​ 공개 함수 index()

{

if( I('get.search'))

{

$search=I(' get.search');

    $where="adminname='$search' 또는 email='$search' 또는phone='$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')=='' 및 I('get. group_id')=='' 및 I('get.group_name')=='')

    {

    $where='1';

    }

    $Admin=new AdminModelAdminModel();

    $count =$Admin->where($where)->count();

    $per = 15;

    if($_GET['p'])

    {

    $p=$_GET['p '];

    }else {

    $p=1;

    }

    $Page= new ThinkPage($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->할당('alist',$adminlist) ;// 赋值数据集

    $this->ass('page',$show);

        $this->display();

    }

    

    //새로운增管리员

    공개 함수 추가()

    {

//관리자 그룹 목록 가져오기

$group=new AdminModelAdminGroupModel();

$grouplist=$group->getGroupList2();

$this->sign('glist',$grouplist);

if(I('post.'))

{

if(I('post.adminname'))

{

$adminname=I('post.adminname');

$Admin=new AdminModelAdminModel();

$res=$Admin->where("adminname='$adminname'")->find();

if($res)

{

$str='X사용자 이름 이미 존재함';

echo $str;

exit();

}else {

$str='';

$a='a';

}

}

if( 나('post.password')와 나('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='X비밀번호가 두 번 다릅니다.';

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;

종료 ();

}

}

if(I('post.phone'))

{

$phone=I('post.phone');

if(is_phone( $phone))

{

$str='';

}else {

$str='X 전화번호 형식이 잘못되었습니다.';

echo $str;

exit();

}

// 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();

    }

    }

    

    //编辑管리员

    공개 함수 편집($uid)

    {

    //获取管理员信息

    $Admin=new AdminModelAdminModel();

    $aMsg=$Admin->getAdminMsg($uid);

    $ this->할당('msg',$aMsg);

    //获取管理员组列表

    $group=D('admin_group');

    $grouplist=$group->getGroupList2();

    $this->ass('glist',$grouplist);

   

    if(IS_POST)

    {

    //var_dump(I('post.'));exit;

    if(I( 'post.adminname'))

    {

    $adminname=I('post.adminname');

    $res=$Admin->where("adminname='$adminname' 및 uid!='$uid '")->find();

    if($res)

    {

    $error='X该用户name已存재';

    $this->sign('error',$error) ;

    $this->display();

    종료();

    }

    }

   

    $email=I('post.email');

    if($email)

    {

    if(is_email($email)!==true)

    {

    $error1='X邮箱格式不正确';

 

    $this->display();

    종료();

    }

    }

   

    $phone=I('post.phone');

    if($phone)

    {

if(is_phone($phone)!==true)

    {

    $error2='X手机号码格式不正确';

    $this->할당('error2',$error2);

    $this ->display();

    종료();

    }

    }

    $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['password']=$pwd;

    }

$res=$Admin->where("uid=$uid")->save($data);

    if($res!==false)

    {

    레이아웃(false);

    $ this->success('编辑管理员成功!',U('index'),3);

    }else {

   layout(false);

    $this->error('操작失败!' );

    }

    }else {

    $this->display();

    }

    }

    

    //修改管리员禁用状态

    공개 함수 변경 상태($id,$status)

    {

    $data=array(

    'status'=>$status

    );

    $Admin=new AdminModelAdminModel();

    $res=$Admin->where("uid=$ id")->save($data);

    if($res===false)

    {

    echo '0';

    }else {

    echo '1';

    }

}

//관리자 삭제

공개 함수 del($id)

{

$Admin=new AdminModelAdminModel();

$res=$Admin->where("uid=$id")- > ;delete();

if($res===false)

{

echo '0';

}else {

echo '1';

}

}

/ / 비밀번호 변경

공용 함수changepwd()

{

if($_SESSION['admin_id']!='')

{

$admin_id=$_SESSION['admin_id'];

if(I ( 'post.'))

{

$oldpwd=I('post.oldpwd');

if($oldpwd=='')

{

$this->sign('error1' , '원래 비밀번호는 비워둘 수 없습니다!');

$this->display();

exit();

}

$pwd1=I('post.pwd1');

$pwd2= I('post.pwd2');

if($pwd1=='')

{

$this->ass('error2','새 비밀번호는 비워둘 수 없습니다!');

$ this ->display();

exit();

}

if($pwd2=='')

{

$this->ass('error3','반복 비밀번호는 비워둘 수 없습니다. !');

$this->display();

exit();

}

if($pwd1==$pwd2)

{

if(strlen($pwd2)>5 )

{

//원래 비밀번호가 맞는지 확인

$Admin=new AdminModelAdminModel();

$res=$Admin->checkPwd($admin_id,$oldpwd);

if($res )

{

//비밀번호 변경

$newpwd=$Admin->encrypt($pwd2);

$data=array(

'password'=>$newpwd

);

$ res2=$ 관리->where("uid=$admin_id")->저장($data);

레이아웃(false);

if($res2===false)

{

$this -> error('비밀번호 변경에 실패했습니다! ');

}else {

  $this->success('비밀번호를 수정했습니다!');

  }

  }else {

  $this->ass('error1','원래 비밀번호 ');

$this->display();

exit();

}

}else {

$this->sign('error3','새 비밀번호는 5자 이상이어야 합니다!');

$this->display();

exit();

}

}else {

$this->asse('error3','두 비밀번호가 다릅니다!');

$this->display();

exit();

}

} else {

$this->display();

}

}else {

$this->redirect('Index/index');

}

}

}

-- ---- --------------------------------- ---- --------------------------------- ---- --------------------------------- ---- ------

세 번째 파일은 다음과 같습니다.

<?php

namespace AdminCommonController;

use ThinkController;

use ThinkAuth;

//권한 인증

class AuthController 확장 컨트롤러 {

protected function _initialize(){

//세션이 없으면 직접 접근이 허용되지 않습니다

if(!$_SESSION['admin_id'])

{

layout(false) ;

$this-> ;error('아직 로그인하지 않았습니다. 로그인 페이지로 이동합니다.',U('Index/index'));

}

//세션이 존재하는 경우 확인 권한이 필요하지 않습니다.

$not_check = 배열(

'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 '권한 없음!';죽음 ();

$this->error('권한 없음');

}

}

}

AA1062일 전1070

모든 응답(5)나는 대답할 것이다

  • A

    A2021-11-09 23:26:42

    해결되었습니다. 감사합니다

    회신하다
    1
  • 初学编程

    나는 똑같은 문제에 직면했습니다. 원본 포스터는 어떻게 해결했습니까? 알려주실 수 있나요? 정말 감사합니다!

    初学编程 · 2021-11-28 00:07:00
  • 취소회신하다