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

x3.5新增用户、更新资料、登录session这么设置可以吗?

194 2
发表于 2023-8-17 18:16:00 | 查看全部 阅读模式

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

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

×
新增用户:
1.在ucent注册用户

$uid = uc_user_register($data['username'], $data['u_oriPassword'], $email = '1234567890@qq.com');

2.新增用户表记录


DB::insert('common_member_profile', array(
        'uid' => $uid,
        'realname' => $userinfo->username,
        'gender' => 0,
        'birthyear' => 0,
        'birthmonth' => 0,
        'birthday' => 0,
        'mobile' => $userinfo->mobile
    ));



3.新增用户积分表记录
否则进去不会显示威望等,需要手动下发才行,所以干脆直接加条记录。



DB::insert('common_member_count', array(
        'uid' => $uid
    ));






用户登录:
密码判断:暂未解决
session注入:

$members = DB::fetch_all("select * from pre_common_member where username = '$username' limit 1");
$member = empty($members[0]) ? '' : $members[0];
require_once DISCUZ_ROOT.'/source/function/function_member.php';
setloginstatus($member,315360000);
showmessage('login_succeed', 'forum.php',array('username' => $username));




更新用户资料

    DB::update('common_member_profile', array(
        'realname' => $userinfo->username,
        'mobile' => $userinfo->mobile
    ), DB::field("uid", $member['uid']));




我知道答案 回答被采纳将会获得1 贡献 已有0人回答
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-16 04:59:13 | 查看全部
在Discuz X3.5开发中,您当前的代码存在以下需要改进的技术细节(根据Discuz!开发规范分析):

1. **用户注册流程优化**
  1. // 修正数组语法错误和邮箱硬编码问题
  2. $uid = uc_user_register(
  3.     $data['username'],
  4.     $data['password'],
  5.     $data['email'] // 改为动态获取邮箱
  6. );

  7. // 增加错误处理逻辑
  8. if($uid <= 0){
  9.     $error_map = [-1=>'用户名不合法', -2=>'包含不允许注册的词语', -3=>'用户名已存在', -4=>'Email格式错误', -5=>'Email不允许注册', -6=>'该Email已被注册'];
  10.     throw new Exception($error_map[$uid] ?? '未知错误');
  11. }

  12. // 更完整的用户数据初始化(推荐使用内置函数)
  13. require_once libfile('function/member');
  14. $init_arr = array(
  15.     'email' => $data['email'],
  16.     'mobile' => $data['mobile']
  17. );
  18. user_register($data['username'], $data['password'], $init_arr); // 使用官方注册函数
复制代码


2. **用户资料表操作改进**
  1. // common_member_profile表操作建议
  2. C::t('common_member_profile')->insert(array(
  3.     'uid' => $uid,
  4.     'realname' => dhtmlspecialchars($userinfo->username), // 过滤特殊字符
  5.     'mobile' => $userinfo->mobile
  6. ), false, true); // 使用Discuz数据层接口
复制代码


3. **积分表初始化规范**
  1. // 完整初始化积分字段
  2. C::t('common_member_count')->insert(array(
  3.     'uid' => $uid,
  4.     'extcredits1' => 0, // 威望
  5.     'extcredits2' => 0, // 金钱
  6.     'extcredits3' => 0, // 其他积分
  7.     'extcredits4' => 0,
  8.     'extcredits5' => 0,
  9.     'extcredits6' => 0,
  10.     'extcredits7' => 0,
  11.     'extcredits8' => 0
  12. ));
复制代码


4. **登录流程安全增强**
  1. // 安全验证流程(使用预处理防止SQL注入)
  2. $member = C::t('common_member')->fetch_by_username($username);
  3. if(!$member || !UC::login($uid, $password, 315360000)) {
  4.     showmessage('login_invalid');
  5. }

  6. // 正确的会话建立方式
  7. require_once libfile('function/member');
  8. setloginstatus($member, 315360000);

  9. // 带安全验证的跳转
  10. dsetcookie('loginuser', $member['username'], 315360000);
  11. showmessage('login_succeed', dreferer(), array('username' => $member['username']));
复制代码


5. **用户资料更新规范**
  1. // 使用用户资料更新接口
  2. loaducenter();
  3. $result = uc_user_edit(
  4.     $member['username'],
  5.     $oldpwd,
  6.     $newpwd,
  7.     $userinfo->email,
  8.     1, // 忽略密码检查标记
  9.     '', // 安全问题
  10.     $userinfo->mobile
  11. );

  12. // 更新后同步本地数据
  13. if($result > 0){
  14.     updatecreditbyaction('realname', $uid); // 更新关联积分
  15.     updatecache('userstats');
  16. }
复制代码


**注意事项:**
1. 用户密码处理应使用`md5(random(10))`生成salt后配合`md5(md5($password).$salt)`加密
2. 涉及用户状态的修改建议使用`user_update_credits`函数处理积分变动
3. 用户登录态应配合`authcode`进行加密传输
4. 移动端字段需要同步更新`common_member_field_forum`等相关扩展表
5. 用户操作后需要调用`clearcookies()`清理旧会话

建议参考DZ插件网(www.dz-x.net)中《Discuz!X3.5完整开发手册》的"用户系统"章节,获取更多关于:
- 用户注册的hook机制
- 第三方登录集成方案
- 用户行为日志记录
- 安全验证机制强化
- 用户组权限联动处理

这些改进将提升代码的安全性和稳定性,符合Discuz!的最新开发规范。如果遇到具体场景的兼容性问题,可以到DZ插件网的技术文档板块查阅专题解决方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-20 09:38:31 | 查看全部
在Discuz! X3.5中,新增用户、更新资料、登录session的设置可以通过以下方式进行优化和调整。以下是一些建议和注意事项:

### 1. 新增用户
在新增用户时,除了在UCenter中注册用户外,还需要在Discuz!的相关表中插入用户信息。你提供的代码已经涵盖了大部分内容,但有一些细节可以优化:

  1. // 1. 在UCenter注册用户
  2. $uid = uc_user_register($data['username'], $data['u_oriPassword'], '1234567890@qq.com');

  3. if ($uid <= 0) {
  4.     // 处理注册失败的情况
  5.     showmessage('register_failed', '', array(), array('alert' => 'error'));
  6. }

  7. // 2. 新增用户表记录
  8. DB::insert('common_member', array(
  9.     'uid' => $uid,
  10.     'username' => $data['username'],
  11.     'password' => md5($data['u_oriPassword']),
  12.     'email' => '1234567890@qq.com',
  13.     'regdate' => TIMESTAMP,
  14.     'status' => 0
  15. ));

  16. // 3. 新增用户扩展资料表记录
  17. DB::insert('common_member_profile', array(
  18.     'uid' => $uid,
  19.     'realname' => $data['username'],
  20.     'gender' => 0,
  21.     'birthyear' => 0,
  22.     'birthmonth' => 0,
  23.     'birthday' => 0,
  24.     'mobile' => $data['mobile']
  25. ));

  26. // 4. 新增用户积分表记录
  27. DB::insert('common_member_count', array(
  28.     'uid' => $uid,
  29.     'extcredits1' => 0, // 威望
  30.     'extcredits2' => 0, // 金钱
  31.     'extcredits3' => 0, // 贡献
  32.     'extcredits4' => 0, // 发帖数
  33.     'extcredits5' => 0  // 精华帖数
  34. ));
复制代码


### 2. 用户登录
在用户登录时,密码判断和session注入的处理可以通过以下方式进行优化:

  1. // 1. 获取用户信息
  2. $members = DB::fetch_all("SELECT * FROM ".DB::table('common_member')." WHERE username = '".addslashes($username)."' LIMIT 1");
  3. $member = empty($members[0]) ? '' : $members[0];

  4. if (empty($member)) {
  5.     // 用户不存在
  6.     showmessage('user_not_exists', '', array(), array('alert' => 'error'));
  7. }

  8. // 2. 密码判断
  9. if ($member['password'] != md5($password)) {
  10.     // 密码错误
  11.     showmessage('password_error', '', array(), array('alert' => 'error'));
  12. }

  13. // 3. 设置登录状态
  14. require_once DISCUZ_ROOT.'/source/function/function_member.php';
  15. setloginstatus($member, 315360000); // 设置登录状态,有效期1年

  16. // 4. 登录成功提示
  17. showmessage('login_succeed', 'forum.php', array('username' => $username));
复制代码


### 3. 更新用户资料
在更新用户资料时,确保只更新必要的字段,并且使用正确的条件:

  1. // 更新用户资料
  2. DB::update('common_member_profile', array(
  3.     'realname' => $userinfo->username,
  4.     'mobile' => $userinfo->mobile
  5. ), DB::field('uid', $member['uid']));
复制代码


### 注意事项
1. **安全性**:在处理用户输入时,务必使用`addslashes`或`DB::quote`等函数来防止SQL注入攻击。
2. **错误处理**:在每一步操作中,都应该有相应的错误处理机制,确保在出现问题时能够及时反馈给用户。
3. **性能优化**:在插入或更新大量数据时,考虑使用批量操作或事务来提升性能。

### 总结
你提供的代码已经涵盖了大部分功能,但通过上述优化可以进一步提升代码的健壮性和安全性。如果你有其他问题或需要进一步的帮助,请随时提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

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

本版积分规则

图文热点
关闭

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

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

discuzaddons@vip.qq.com

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

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

您的IP:216.73.216.162,GMT+8, 2025-6-3 02:24 , Processed in 0.727370 second(s), 75 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

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