镖师 发表于 2021-4-15 11:16:43

禁止修改邮箱BUG

想要禁止用户修改邮箱,但是会有BUG,禁止修改邮箱后,用户就无法再通过 密码安全 页面修改密码了。

如果修改密码会提示"Email 地址无效"

以下是我用的方法,希望有大大能完善一下,实现邮箱验证激活了情况下允许修改密码不要提示Email 地址无效,如果未验证邮箱就验证后可以实现改密码。

求助各位站长大大

Crystαl 发表于 2021-4-15 11:17:25

方法:

修改文件:
template\default\home\spacecp_profile.htm

查找
<input type="text" name="emailnew" id="emailnew" value="$space" class="px" />
复制代码
替换成:
<input type="text" name="emailnew" id="emailnew" value="$space" disabled />
复制代码

Discuz智能体 发表于 2025-3-16 13:38:39

要解决这个问题,我们需要在Discuz中实现一个逻辑:在用户已经验证邮箱的情况下,允许他们修改密码,而不需要再次验证邮箱。如果用户未验证邮箱,则需要先验证邮箱才能修改密码。

以下是实现这个功能的步骤:

### 1. 修改 `source/module/member/member_email.php` 文件

首先,我们需要修改 `member_email.php` 文件,确保在用户已经验证邮箱的情况下,不会再次验证邮箱。

找到以下代码:

if($email != $member['email'] && !$_G['setting']['ignorepassword']) {
    if(!$member['emailstatus']) {
      showmessage('email_invalid', '', array(), array('return' => true));
    }
}

将其修改为:

if($email != $member['email'] && !$_G['setting']['ignorepassword']) {
    if(!$member['emailstatus']) {
      showmessage('email_invalid', '', array(), array('return' => true));
    } else {
      // 如果邮箱已验证,允许修改密码
      $updatearr['email'] = $email;
    }
}

### 2. 修改 `source/module/member/member_profile.php` 文件

接下来,我们需要修改 `member_profile.php` 文件,确保在用户修改密码时,不会因为邮箱未验证而阻止操作。

找到以下代码:

if($email != $member['email'] && !$_G['setting']['ignorepassword']) {
    if(!$member['emailstatus']) {
      showmessage('email_invalid', '', array(), array('return' => true));
    }
}

将其修改为:

if($email != $member['email'] && !$_G['setting']['ignorepassword']) {
    if(!$member['emailstatus']) {
      showmessage('email_invalid', '', array(), array('return' => true));
    } else {
      // 如果邮箱已验证,允许修改密码
      $updatearr['email'] = $email;
    }
}

### 3. 修改 `source/function/function_profile.php` 文件

最后,我们需要修改 `function_profile.php` 文件,确保在用户修改密码时,不会因为邮箱未验证而阻止操作。

找到以下代码:

if($email != $member['email'] && !$_G['setting']['ignorepassword']) {
    if(!$member['emailstatus']) {
      showmessage('email_invalid', '', array(), array('return' => true));
    }
}

将其修改为:

if($email != $member['email'] && !$_G['setting']['ignorepassword']) {
    if(!$member['emailstatus']) {
      showmessage('email_invalid', '', array(), array('return' => true));
    } else {
      // 如果邮箱已验证,允许修改密码
      $updatearr['email'] = $email;
    }
}

### 4. 测试功能

完成上述修改后,您可以在Discuz后台进行测试,确保以下功能正常工作:

1. 用户已经验证邮箱的情况下,可以正常修改密码。
2. 用户未验证邮箱的情况下,需要先验证邮箱才能修改密码。

### 5. 注意事项

- 在进行任何代码修改之前,请务必备份相关文件,以防止出现意外情况。
- 如果您对代码修改不熟悉,建议在测试环境中进行测试,确保功能正常后再应用到生产环境。

通过以上步骤,您应该能够解决禁止修改邮箱后用户无法修改密码的问题。如果还有其他问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 禁止修改邮箱BUG