关闭discuzX3.2注册页面的注册邮箱验证
admin
2023-05-25 07:41:35
0

    

论坛升级后发现注册用户在输入任何邮箱email时,一直提示email 地址无效.用firephp跟踪发现:随机生成的email的后缀是@localhost!

找到原因,修改如下:

关闭discuzX3.2注册页面的注册邮箱验证

//原来代码if(empty($email) && $_G['setting']['forgeemail'])
{$_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'];
}//但是如果本地调试emai后缀就是@localhost,不符合邮箱的规则if(empty($email) && $_G['setting']['forgeemail'])
{$_GET['email'] = $email = strtolower(random(16)).'@'.'klaus.com';
}//增加了16位随机码,减少生成相同的邮箱概率;
//后缀固定,这样就不提示'Email 地址无效'了!

关闭discuzX3.2注册页面的注册邮箱验证

但是这个感觉太lower了,回到dz3.1以前的玩法是:

在DZ3.2以前的版本的后台我们可以在全局——注册与访问——取消邮箱注册必填如下图:
关闭discuzX3.2注册页面的注册邮箱验证

接下来就问题来了,Discuz官方团队可能也考虑到了这个问题,也许他们也像我这样认为这个地方在后台出现没多大必要,于是他们就在X3.2版本中更新了这个模块,更新的结果我觉得应该是这样的:在后台取消这个设置,但数据库里面存储的信息不变,而且在注册的时候不再使用这个数据库里面的设置的值为依据。于是就造成了上面的问题了,虽然让用户觉得不需要必须填(因为没红星),但不填之后注册不了

问题分析

通过对X3.1后台设置分析发现这里是一个radio类型的,也就是开关(废话而已,谁都看得出来);表单name为settingnew[forgeemail],值为0和1,0为关闭,1为打开,这个跟一般的习惯都是一样的。也就是说这个值选择1时我们注册的时候可以不需要填写邮箱,反之也就是默认情况下我们必须填写邮箱才能注册帐号。

而做过Discuz二次开发的同学都应该清楚,其实后台类似这样的设置数据都是存储在common_setting这个数据表中,而很快我发现这个数据表中直接有forgeemail这个记录,说明这个地方dz是直接保存的(不想保存高亮值信息那样,还通过进制转化,哈哈,不用再看源代码去了)。如下图(当然下面是默认的样子)
关闭discuzX3.2注册页面的注册邮箱验证

问题解决

说到这里大家就应该明白了什么问题了,其实这个问题就是3.2以后这个数据表中的skey为forgeemail的记录只是用于判断是否带红星,而不用于判断是不是真要填;换句话说不管这里设置的是0还是1,你的网站注册的时候都得填写邮箱(这可能也是DZ团队在升级改变这个问题所忽视的地方,比如就算强制设计成必填,那么也应该把数据库的这个字段值在升级的时候自动覆盖成0了)。

那么如果彻底解决(也就是可以让你的网站实现用户不不必填写邮箱也可以注册),这个相对比较复杂,要修改你注册表单的验证程序,而且我个人也不推荐这么做,这里就不详述了。

那么接下来就是把注册的时候带上红星(其实默认的时候就是这样的),当然问题是针对在3.2之前通过后台设置过这值的网站。那么现在去数据库找到common_setting这个数据表找到skey值forgeemail的svalue改为默认的0就可以了,也可以在数据库管理工具或者网站后台运行以下sql语句

update pre_common_setting set 'svalue'='0' where  'skey'='orgeemail'
注意:这里的表前缀为DZ的默认的pre_,如果你修改了,改成你新修改的

discuzX3.2后台关闭注册邮箱必填选项的功能。详细过程如下:
步骤1:source/admincp/admincp_setting.php 文件 
查找:

    showsetting('setting_access_register_send_register_url', 'settingnew[sendregisterurl]', $setting['sendregisterurl'], 'radio');

大概是440-441行:
增加以下代码:

    showsetting('setting_access_register_forge_email', 'settingnew[forgeemail]', $setting['forgeemail'], 'radio');

步骤2:打开source/language/lang_admincp.php 文件
查找: 一个邮箱只允许注册一个帐户

大概811行,增加以下代码:

'setting_access_register_forge_email' => '取消注册邮箱必填',

'setting_access_register_forge_email_comment' => '开启后如果用不不填写注册邮箱,将自动生成一个邮箱地址',

步骤3:修改source/class/class_member.php
大概611行:
原文是:

关闭discuzX3.2注册页面的注册邮箱验证

$email = strtolower(trim($_GET['email']));if(empty($this->setting['ignorepassword'])) {if($_GET['password'] !== $_GET['password2']) {
   showmessage('profile_passwd_notmatch');
}if(!$_GET['password'] || $_GET['password'] != addslashes($_GET['password'])) {
  showmessage('profile_passwd_illegal');
 } $password = $_GET['password'];
} else {       $password = md5(random(10));
       }
}

关闭discuzX3.2注册页面的注册邮箱验证

修改为(或直接替换以下:)

关闭discuzX3.2注册页面的注册邮箱验证

$email = strtolower(trim($_GET['email']));if(empty($email) && $_G['setting']['forgeemail']) {    $_GET['email'] = $email = strtolower(random(6)).'@'.$_SERVER['HTTP_HOST'];
}if(empty($this->setting['ignorepassword']))
{    if($_GET['password'] !== $_GET['password2']) {
        showmessage('profile_passwd_notmatch');
    }    if(!$_GET['password'] || $_GET['password'] != addslashes($_GET['password']))
    {
        showmessage('profile_passwd_illegal');
    }    $password = $_GET['password'];
} 
else {    $password = md5(random(10));
}
}

关闭discuzX3.2注册页面的注册邮箱验证

工具->更新缓存:
全局->注册与访问控制:
关闭discuzX3.2注册页面的注册邮箱验证

如果你想在注册页面不显示 注册邮箱选项,直接去掉模板中的相应的email代码即可。


相关内容

热门资讯

一文看懂谷歌I/O 2026:... 谷歌CEO 桑达尔·皮查伊 出品|搜狐科技 作者|郑松毅 编辑|杨锦 北京时间5月20日凌晨,加州山...
框式交换机为何备受青睐?解读T... 在数据中心与大型企业网络的核心层,框式交换机扮演着至关重要的角色。它不仅是网络流量汇聚与分发的中枢,...
原创 深... 物质的组成和结构是化学学科最基础也最核心的内容。从微观层面理解物质的本质,不仅能够解释宏观现象,更能...
男子为涨粉编造虚假疫情,被警方... 网络空间不是“法外之地”更不是“谣言农场”在全民同心共筑健康防线的当下总有个别人为博取流量、收割目光...
微穷年轻人:过不起520,也分... 要问互联网上,哪一种爱情文本最经久不衰?最常被大众拿来咀嚼?答案必然是“出租屋文学”。没人想谈出租屋...
罕见提前通报,辽宁舰编队赴西太... 【环球时报报道 记者 郭媛丹】“人民海军”微信公众号19日发布消息称,5月19日,中国人民解放军海军...
美国被曝将于20日起诉劳尔·卡... 在对古巴进行了长达数月的极限施压后,美国正酝酿下一步行动。美国被曝将于5月20日正式起诉古巴前领导人...
身家320亿元,超级富豪离奇坠... 据西班牙国家警察总署最新消息,西班牙服装巨头Mango创始人伊萨克•安迪奇(Isak Andic)之...
请问一下台式电脑怎么看配置参数 想要查看台式电脑的参数情况其实非常简单,就是在您的电脑上面装一个鲁大师,然后在鲁大师当中选择检测,那...
求问笔记本电脑键盘错乱了怎么调... 最佳回答在笔记本电脑的键盘出现了错乱的问题之后,现在想要把它调整回来,则需要通过如下的方式去尝试。第...