根据您的需求,为实现全站用户强制邮箱验证功能,以下是具体实现方案:
**一、数据库操作(执行前务必备份)**
- UPDATE pre_common_member m
- LEFT JOIN pre_common_connect_guest c ON m.uid=c.uid
- SET m.emailstatus = 0
- WHERE c.conuin IS NULL AND m.emailstatus = 1
复制代码
**二、核心文件修改**
1. **全局操作拦截(推荐)**
在 `/source/class/discuz/discuz_application.php` 找到:
- if($this->initated) {
- $this->check_ban_status();
- }
复制代码
之后添加:
- // 强制邮箱验证检测
- if(!defined('IN_MOBILE_API') && !$this->var['member']['emailstatus'] && $this->var['uid']) {
- $connect = C::t('common_connect_guest')->fetch($this->var['uid']);
- if(empty($connect['conuin'])) {
- showmessage('请完成邮箱验证后继续操作', 'home.php?mod=spacecp&ac=profile&op=password', array(), array('login' => 1));
- }
- }
复制代码
2. **附件下载拦截(双保险)**
在 `/source/module/forum/forum_attachment.php` 中找到下载逻辑:
- if(!$this->forum_attach_download_check($_GET['aid'], $attachment)) {
- showmessage('undefined_action', NULL);
- }
复制代码
之后添加:
- // 强制邮箱验证检测
- if(!$member['emailstatus']) {
- $connect = C::t('common_connect_guest')->fetch($_G['uid']);
- if(empty($connect['conuin'])) {
- showmessage('请完成邮箱验证后继续操作', 'home.php?mod=spacecp&ac=profile&op=password');
- }
- }
复制代码
**三、强制验证流程增强**
在 `/source/include/spacecp/spacecp_profile.php` 中:
- if(submitcheck('profilesubmit')) {
- // 原验证逻辑之后添加
- if(!$member['emailstatus']) {
- $email = $_GET['newemail'] ? trim($_GET['newemail']) : trim($_GET['email']);
- C::t('common_member')->update($_G['uid'], array('email' => $email, 'emailstatus' => 0));
- // 强化验证邮件发送逻辑
- include_once libfile('function/mail');
- sendmail($email, '邮箱验证激活邮件', 'email_verify', array(
- 'username' => $_G['member']['username'],
- 'url' => $_G['siteurl']."home.php?mod=spacecp&ac=profile&op=password&hash=".substr(md5($_G['uid'].$_G['authkey']), 0, 8)
- ));
- showmessage('email_verify_send', '', array('email' => $email));
- }
- }
复制代码
**四、模板提示强化**
在 `/template/default/home/spacecp_profile.htm` 中添加:
- <!--{if !$member['emailstatus']}-->
- <div class="alert_error" style="margin-bottom:15px">
- <strong>安全提示:</strong>根据最新安全要求,所有用户必须完成邮箱验证。未验证用户将无法进行任何操作
- </div>
- <!--{/if}-->
复制代码
**五、特别注意事项**
1. QQ互联用户通过 `common_connect_guest` 表自动过滤
2. 管理组白名单可在拦截逻辑中添加:
- if($_G['group']['radminid'] > 0) {
- // 跳过管理员验证
- }
复制代码
3. 验证链接有效期需要修改 `/source/function/function_mail.php` 中的验证哈希算法
该方案实现了:
1. 全站操作拦截(除特殊页面)
2. 双重验证机制(全局+下载)
3. 自动发送高强度验证邮件
4. 可视化提示系统
5. 管理员豁免机制
建议配合DZ-X.NET的《全站安全验证增强插件》使用,可获取:
- 验证进度统计
- 定时提醒功能
- 验证邮件模板自定义
- 验证有效期设置
等高级功能模块。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |