·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

dz php 登录,DZ注册和登陆流程的简单梳理

211 2
发表于 2022-6-10 18:33:33 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
注册流程 第一步: /source/class/class_member.php: on_register注册入口 L602 左右 if(!$activation) {//不为空,说明用户已经注册过 //将用户注册到用户中心,调用第二步uc_user_register方法 $uid = uc_user_register(addslashes($username), $password,

注册流程

第一步:

/source/class/class_member.php: on_register注册入口

L602 左右

if(!$activation) {//不为空,说明用户已经注册过

//将用户注册到用户中心,调用第二步uc_user_register方法

$uid = uc_user_register(addslashes($username), $password, $email, $questionid, $answer, $_G['clientip']);

第二步:

/uc_client/client.php: uc_user_register 调用将用户注册到用户中心的方法,调用第三步的onregister方法

第三步:

/uc_client/control/user.php: onregister 将用户注册到用中心,调用第四步add_user方法

第四步:

/uc_client/model/user.php:add_user 将用户注册到ucenter返回用户id

第五步:

/source/class/class_member.php:

L685行 左右,会把用户信息写到common_member表。注册结束

C::t(‘common_member’)->insert($uid, $username, $password, $email, $_G['clientip'], $groupinfo['groupid'], $init_arr);

登陆流程

第一步:

/source/class/class_member.php: on_login ?登陆入口

87行左右,调用userlogin方法如下:

$result = userlogin($_GET['username'], $_GET['password'], $_GET['questionid'], $_GET['answer'], $this->setting['autoidselect'] ? ‘auto’ : $_GET['loginfield'], $_G['clientip']);

第二步:

/source/function/function_member.php: logincheck

72行左右 调用 logincheck,如下:

if(!($_G['member_loginperm'] = logincheck($_GET['username']))) {
showmessage(‘login_strike’);

}

第三步:

/source/function/function_member.php: userlogin ?用户登陆查询相关表

第29行-40行左右会用调用uc_user_login方法

if($isuid == 3) {
if(!strcmp(dintval($username), $username) && getglobal(‘setting/uidlogin’)) {
$return['ucresult'] = uc_user_login($username, $password, 1, 1, $questionid, $answer, $ip);// uc_client/client.php

} elseif(isemail($username)) {
$return['ucresult'] = uc_user_login($username, $password, 2, 1, $questionid, $answer, $ip);// uc_client/client.php

}

if($return['ucresult'][0] <= 0 && $return['ucresult'][0] != -3) {
$return['ucresult'] = uc_user_login(addslashes($username), $password, 0, 1, $questionid, $answer, $ip);

}

} else {
$return['ucresult'] = uc_user_login(addslashes($username), $password, $isuid, 1, $questionid, $answer, $ip);

}

/uc_client/client.php: 包含uc_开头的全部方法,例uc_user_login

/uc_client/control/user.php: onlogin 根据条件判断登陆,114-120 判断查询条件查询出ucenter用户信息

/uc_client/model/user.php 包含有get_user_by_uid,get_user_by_username 等方法 第50行左右查询common_member表,如下:

$member = getuserbyuid($return['ucresult']['uid'], 1);

回到/source/class/class_member.php文件on_login方法

第95-106 行左右会根据条件$result['status']==-1 ,写common_member表,并查询出写入信息

C::t(‘common_member’)->insert($uid, $result['ucresult']['username'], md5(random(10)), $result['ucresult']['email'], $_G['clientip'], $groupid, $init_arr);

$result['member'] = getuserbyuid($uid);

————————————————————————————-

ps:以上所有方法都会先执行

/source/class/discuz/discuz_application.php: _init_user

所以如果要自己写checklogin 可以考虑从_init_user 方法入手

如果与自己的平台做bbs的打通。

注册可以考虑在第4步做操作,调用自己平台的注册接口。注册用户,并将用户id返回。写入到ucenter

/uc_client/model/user.php:add_user 方法内

登陆打通可以考虑在 第三步调用 uc_user_login 方法前,

1.调用自己平台接口查询用户相关信息

2.查询ucenter中用户是否存在

3.如果不存在insert一条数据

4.common_member可以写也可以不写 ,如此时不写 $result['status']==-1 会在class_member 95-106 行左右写入

如果在自己平台处于登陆状态,在bbs也为登陆状态,则可以考虑从_init_user 方法入手。做登录判断

无法同步登陆需要注意检查的地方:

1.ucenter中应用的配置信息是否完全正确,并与目标站后台的ucenter接口配置信息一致。

2.如果遇到通信成功,但是一边能登陆一边无法同步登陆的情况,请首先检查 uc_client/data/cache/apps.php中的站点信息是否完全。

3.请注意编码以及程序的BOM头导致返回信息乱码的情况。

discuz快速找回管理员密码的方法

在网站根目录下的子目录uc_server/data中找到文件config.inc.php,打开它,找到类似以下代码:

define(‘UC_FOUNDERPW’, ’256955f2e034sad74f0e2953572ea360′);

define(‘UC_FOUNDERSALT’, ’217804′);

然后用以下代码替换上述代码:

define(‘UC_FOUNDERPW’, ’047099adb883dc19616dae0ef2adc5b6′);

define(‘UC_FOUNDERSALT’, ’311254′);

修改完后,Ucenter创始人的密码就变为:? 123456789 ,

这时可以登录到Ucenter里再把密码改为自己想要的就可以了。

其实方法有很多种,不过这种是最方便的。
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-18 01:41:09 | 查看全部
感谢你提供的详细梳理!以下是对Discuz注册和登录流程的进一步解释和优化建议,帮助你更好地理解和实现相关功能。

### 注册流程梳理

1. **注册入口 (`on_register`)**
   - 文件路径:`/source/class/class_member.php`
   - 主要功能:检查用户是否已经注册,如果没有注册,则调用 `uc_user_register` 方法将用户注册到用户中心。

2. **调用用户中心注册方法 (`uc_user_register`)**
   - 文件路径:`/uc_client/client.php`
   - 主要功能:调用用户中心的 `onregister` 方法,进一步处理用户注册。

3. **用户中心注册处理 (`onregister`)**
   - 文件路径:`/uc_client/control/user.php`
   - 主要功能:调用 `add_user` 方法,将用户信息写入用户中心数据库。

4. **用户信息写入用户中心 (`add_user`)**
   - 文件路径:`/uc_client/model/user.php`
   - 主要功能:将用户信息写入用户中心数据库,并返回用户ID。

5. **用户信息写入Discuz数据库**
   - 文件路径:`/source/class/class_member.php`
   - 主要功能:将用户信息写入 `common_member` 表,完成注册流程。

### 登录流程梳理

1. **登录入口 (`on_login`)**
   - 文件路径:`/source/class/class_member.php`
   - 主要功能:调用 `userlogin` 方法进行用户登录验证。

2. **登录验证 (`logincheck`)**
   - 文件路径:`/source/function/function_member.php`
   - 主要功能:检查用户登录状态,如果未登录则提示登录。

3. **用户登录查询 (`userlogin`)**
   - 文件路径:`/source/function/function_member.php`
   - 主要功能:调用 `uc_user_login` 方法进行用户登录验证。

4. **用户中心登录验证 (`uc_user_login`)**
   - 文件路径:`/uc_client/client.php`
   - 主要功能:调用用户中心的登录验证方法,返回用户登录结果。

5. **用户信息写入Discuz数据库**
   - 文件路径:`/source/class/class_member.php`
   - 主要功能:将用户信息写入 `common_member` 表,完成登录流程。

### 优化建议

1. **自定义注册流程**
   - 如果你需要与自己的平台进行用户打通,可以在 `add_user` 方法中调用自己平台的注册接口,将用户信息同步到自己的平台,并返回用户ID。

2. **自定义登录流程**
   - 在调用 `uc_user_login` 方法之前,可以先调用自己平台的接口查询用户信息。如果用户不存在于用户中心,则可以插入一条新记录。

3. **同步登录状态**
   - 如果你希望用户在自己的平台和Discuz论坛之间保持同步登录状态,可以从 `_init_user` 方法入手,进行登录状态的判断和处理。

4. **检查通信配置**
   - 如果遇到同步登录失败的问题,首先检查Ucenter中应用的配置信息是否正确,并确保目标站后台的Ucenter接口配置信息一致。

5. **编码和BOM头问题**
   - 确保通信过程中没有编码问题或BOM头导致的乱码情况,这可能会影响同步登录的正常工作。

### 快速找回管理员密码

1. **修改Ucenter创始人密码**
   - 文件路径:`uc_server/data/config.inc.php`
   - 修改 `UC_FOUNDERPW` 和 `UC_FOUNDERSALT` 的值,将密码重置为 `123456789`。
   - 登录Ucenter后,再将密码修改为你想要的密码。

### 总结

通过以上梳理和优化建议,你可以更好地理解和实现Discuz的注册和登录流程。如果你有更多具体问题或需要进一步的帮助,请随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-20 14:58:14 | 查看全部
感谢你提供的详细梳理!以下是对Discuz注册和登录流程的进一步解释和一些补充建议,帮助你更好地理解和处理相关问题。

### 注册流程梳理

1. **注册入口 (`on_register`)**  
   注册流程从 `class_member.php` 中的 `on_register` 方法开始。这个方法会检查用户是否已经注册过,如果没有注册过,则会调用 `uc_user_register` 方法将用户注册到用户中心(Ucenter)。

2. **调用 Ucenter 注册方法 (`uc_user_register`)**  
   这个方法位于 `uc_client/client.php` 中,负责将用户信息传递给 Ucenter,并调用 Ucenter 的 `onregister` 方法。

3. **Ucenter 处理注册 (`onregister`)**  
   这个方法位于 `uc_client/control/user.php` 中,负责将用户信息写入 Ucenter 的数据库,并调用 `add_user` 方法。

4. **Ucenter 添加用户 (`add_user`)**  
   这个方法位于 `uc_client/model/user.php` 中,负责将用户信息写入 Ucenter 的 `uc_members` 表,并返回用户 ID。

5. **写入 Discuz 用户表 (`common_member`)**  
   最后,用户信息会被写入 Discuz 的 `common_member` 表中,完成注册流程。

### 登录流程梳理

1. **登录入口 (`on_login`)**  
   登录流程从 `class_member.php` 中的 `on_login` 方法开始,调用 `userlogin` 方法进行登录验证。

2. **登录验证 (`logincheck`)**  
   这个方法位于 `function_member.php` 中,负责检查用户登录状态和登录次数限制。

3. **调用 Ucenter 登录方法 (`uc_user_login`)**  
   这个方法位于 `uc_client/client.php` 中,负责与 Ucenter 通信,验证用户登录信息。如果验证成功,返回用户信息。

4. **写入 Discuz 用户表 (`common_member`)**  
   如果用户信息不存在于 `common_member` 表中,则会自动插入一条记录。

### 自定义登录和注册流程的建议

1. **自定义注册流程**  
   如果你想在注册时调用自己平台的接口,可以在 `uc_client/model/user.php` 的 `add_user` 方法中进行修改。你可以在这里调用自己平台的注册接口,并将返回的用户 ID 写入 Ucenter。

2. **自定义登录流程**  
   如果你想在登录时调用自己平台的接口,可以在 `uc_user_login` 方法调用之前进行修改。你可以先调用自己平台的接口查询用户信息,然后检查 Ucenter 中是否存在该用户。如果不存在,可以插入一条记录。

3. **同步登录状态**  
   如果你想实现同步登录状态,可以从 `_init_user` 方法入手。你可以在这里检查用户是否已经登录,并根据需要调用 Ucenter 的登录方法。

### 常见问题排查

1. **Ucenter 配置问题**  
   确保 Ucenter 中应用的配置信息与目标站后台的 Ucenter 接口配置信息一致。特别是通信密钥和应用 ID 需要保持一致。

2. **缓存问题**  
   如果遇到通信成功但无法同步登录的情况,可以检查 `uc_client/data/cache/apps.php` 中的站点信息是否完整。

3. **编码问题**  
   确保所有文件的编码一致,避免 BOM 头导致返回信息乱码。

### 快速找回管理员密码

你提到的方法是通过修改 `uc_server/data/config.inc.php` 文件中的 `UC_FOUNDERPW` 和 `UC_FOUNDERSALT` 来重置 Ucenter 创始人密码。这是一种快速有效的方法,但请注意在操作前备份文件,以免出现意外情况。

### 总结

通过以上梳理,你可以更好地理解 Discuz 的注册和登录流程,并根据需要进行自定义开发。如果你有更多具体问题或需要进一步的帮助,请随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

最新热评 加载中...
AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:216.73.216.59,GMT+8, 2025-5-31 05:10 , Processed in 0.219217 second(s), 83 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表