Discuz教程网

[二次开发] discuzX的登录验证机制

[复制链接]
authicon dly 发表于 2015-5-26 16:41:42 | 显示全部楼层 |阅读模式
discuzX的注册和登录都是很安全的,但是我们其实也可以自己设置对于密码的计算方法。现对于其实现原理进行简单说明,
首先,在discuzX上登录提交的是
  1. member.php?mod=logging&action=login&loginsubmit=yes&frommessage&loginhash=Lxb8h
复制代码

这样一个表单。
mod是代表模块,对于mod=logging这个调用的是
  1. source/module/member/member_logging.php
复制代码

通过层层剥离调用,登录具体验证实现是通过
  1. uc_client\control\user.php
复制代码

中的onlogin()函数
具体代码是
  1.         function onlogin() {
  2.                 $this->init_input();
  3.                 $isuid = $this->input('isuid');
  4.                 $username = $this->input('username');
  5.                 $password = $this->input('password');
  6.                 $checkques = $this->input('checkques');
  7.                 $questionid = $this->input('questionid');
  8.                 $answer = $this->input('answer');
  9.                 if($isuid == 1) {
  10.                         $user = $_ENV['user']->get_user_by_uid($username);
  11.                 } elseif($isuid == 2) {
  12.                         $user = $_ENV['user']->get_user_by_email($username);
  13.                 } else {
  14.                         $user = $_ENV['user']->get_user_by_username($username);
  15.                 }

  16.                 $passwordmd5 = preg_match('/^\w{32}$/', $password) ? $password : md5($password);
  17.                 if(empty($user)) {
  18.                         $status = -1;
  19.                 } elseif($user['password'] != md5($passwordmd5.$user['salt'])) {
  20.                         $status = -2;
  21.                 } elseif($checkques && $user['secques'] != '' && $user['secques'] != $_ENV['user']->quescrypt($questionid, $answer)) {
  22.                         $status = -3;
  23.                 } else {
  24.                         $status = $user['uid'];
  25.                 }
  26.                 $merge = $status != -1 && !$isuid && $_ENV['user']->check_mergeuser($username) ? 1 : 0;
  27.                 return array($status, $user['username'], $password, $user['email'], $merge);
  28.         }
复制代码

如果我们想不要默认md5的判断进行登录校验修改
  1. if(empty($user)) {
  2.                         $status = -1;
  3.                 } elseif($user['password'] != md5($passwordmd5.$user['salt'])) {
  4.                         $status = -2;
  5.                 } elseif($checkques && $user['secques'] != '' && $user['secques'] != $_ENV['user']->quescrypt($questionid, $answer)) {
  6.                         $status = -3;
  7.                 } else {
  8.                         $status = $user['uid'];
  9.                 }
复制代码

的判断即可



上一篇:如何批量替换论坛标题和内容关键词
下一篇:如何添加主导航、顶部导航和底部导航颜色
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 01:33

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表