关闭discuzX3.2注册页面的注册邮箱验证
论坛升级后发现注册用户在输入任何邮箱email时,一直提示email 地址无效.用firephp跟踪发现:随机生成的email的后缀是@localhost!
找到原因,修改如下:
//原来代码
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 地址无效'了!
但是这个感觉太lower了,回到dz3.1以前的玩法是:
在DZ3.2以前的版本的后台我们可以在全局——注册与访问——取消邮箱注册必填如下图:
接下来就问题来了,Discuz官方团队可能也考虑到了这个问题,也许他们也像我这样认为这个地方在后台出现没多大必要,于是他们就在X3.2版本中更新了这个模块,更新的结果我觉得应该是这样的:在后台取消这个设置,但数据库里面存储的信息不变,而且在注册的时候不再使用这个数据库里面的设置的值为依据。于是就造成了上面的问题了,虽然让用户觉得不需要必须填(因为没红星),但不填之后注册不了
问题分析
通过对X3.1后台设置分析发现这里是一个radio类型的,也就是开关(废话而已,谁都看得出来);表单name为settingnew[forgeemail],值为0和1,0为关闭,1为打开,这个跟一般的习惯都是一样的。也就是说这个值选择1时我们注册的时候可以不需要填写邮箱,反之也就是默认情况下我们必须填写邮箱才能注册帐号。
而做过Discuz二次开发的同学都应该清楚,其实后台类似这样的设置数据都是存储在common_setting这个数据表中,而很快我发现这个数据表中直接有forgeemail这个记录,说明这个地方dz是直接保存的(不想保存高亮值信息那样,还通过进制转化,哈哈,不用再看源代码去了)。如下图(当然下面是默认的样子)
问题解决
说到这里大家就应该明白了什么问题了,其实这个问题就是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行:
原文是:
$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));
}
}
修改为(或直接替换以下:)
$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));
}
}
工具->更新缓存:
全局->注册与访问控制:
如果你想在注册页面不显示 注册邮箱选项,直接去掉模板中的相应的email代码即可。
关闭discuzX3.2注册页面的注册邮箱验证的更多相关文章
- Ecshop实现注册页面手机号唯一的验证
前天,公司总监提了一个需求,实现我公司商城注册会员用手机号登录这个功能,那么这个功能容易修改,在我的前一篇博文中已经给出处理方法了,但是这里有一个问题,就是如果实现了用手机号码来登陆,那么就需要在注册 ...
- 实现Ecshop注册页面手机号唯一的验证
如果Ecshop实现了用手机号码来登陆,那么就需要在注册时保证会员所填写的手机号是唯一的,也就是说手机号还未被注册,那么该怎么来检测填写的手机号是否注册过了呢? 一.参考ecshop检测邮箱 因为注册 ...
- localStorage注册页面A注册数据在本地储存并在B页面打开
如题目的这么一个问题, A页面代码 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- iOS BMOB-登录注册手机验证码、邮箱验证
1.下载BmobSDK 2.把里面的BmobSDK.framework拖到你的工程里面的工具文件夹内. 3.导入类库 CoreLocation.framework.Security.framework ...
- JavaWeb网上图书商城完整项目--27.注册页面之注册按钮图片切换实现
我们要实现立即注册这个按钮,光标获得焦点是一张图片,光标失去焦点的时候是另外一张图片 我们需要在文档加载完成之后,设置该事件hover事件 hover(over,out)这是jQuery的一个模仿悬停 ...
- DEDECMS开启邮箱验证通知的解决方法
[摘要]织梦CMS是开源内容管理系统,是国内开源CMS的领先品牌,目前程序安装量已达七十万,本文介绍DEDECMS会员注册时,开启邮箱验证通知的解决方法. 在论坛上看到很多人都说这个功能没用,邮箱根本 ...
- DW课堂练习 用所学的知识去制作一个 (邮箱的注册页面)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 短信登录与注册接口、前端所有方式登录注册页面、redis数据库介绍与安装
今日内容概要 短信登陆接口 短信注册接口 登陆注册前端 redis介绍和安装 内容详细 1.短信登陆接口 在视图类 user/views.py中修改并添加: from .serializer impo ...
- 注册页面的简单搭建(H5)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- JavaScript的for循环中嵌套一个点击事件为何点击一次弹出多个相同的值
先看下面一段代码: for(var i=0; i<10; i++) { $('#ul').bind('click', function() { alert(i) }) } 对于这段代码,当点击I ...
- 四十年前的 6502 CPU 指令翻译成 JS 代码会是怎样
去年折腾的一个东西,之前 blog 里也写过,不过那时边琢磨边写,所以比较杂乱,现在简单完整地讲解一下. 前言 当时看到一本虚拟机相关的书,正好又在想 JS 混淆相关的事,无意中冒出个问题:能不能把某 ...
- javaSE复习总结
之前匆匆忙忙学完了java,后来又接着学习ee,然而,越是想要快一点最后反而会更慢一点.因为匆忙间 我几乎什么都没学会.在后面的学习中实在非常吃力.就把javase 的视频大部分又重新看了一遍.真的收 ...
- C#的数据类型、数据类型的转化
一.c#有15个预定义类型,其中13个是值类型,两个是引用类型(string 和 object)这里主要说明整型.浮点型.布尔型以及引用型 1.整型数据 2.浮点型 浮点型从精度有低到高有float. ...
- 史上最全的AJAX
概述 对于web应用程序:用户浏览器发送请求.服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML),渲染并显示浏览器上· Ajax和Form表单提交数据的的好 ...
- ReactiveSwift日常运用<一>
上一篇中,我已经很详细的介绍了ReactiveSwift,接下来我就举几个简单的例子供大家参考.1.键盘的监听这在我们开发中很常用,因为很多App都需要对登录注册进行判断,这样可以避免服务器存储很多废 ...
- 关于报错:AttributeError: module 'turtle' has no attribute 'setup' 问题
对于我们菜鸟,往往安装软件后,都容易使用默认设置,结果将写的文件保存到了安装目录下. 这样造成了很大得隐患,如果写得文件,名称与安装目录下得系统文件名称重复,就容易出现以上报错. 解决方法:1.将文件 ...
- 纯Jquery前端分页
---恢复内容开始--- 由于之前自己做过jquery分页,就是调用jni接口时,只能用前台分页解决显示问题.最近看到有人提这样的问题:一个请求传过来上万个数据怎么办?于是萌生了写这篇博客的想法. 效 ...
- linux系统和Windows系统共存
最近接触了linux系统,因为对linux系统一直存在一种敬畏之心,所以决定研究研究 那么今天我在这里呢是要和大家分享一下在Windows存在的情况下安装双系统linux 那么第一步呢,就是斤BIOS ...
- MIT 计算机科学及编程导论 Python 笔记 1
计算机科学及编程导论在 MIT 的课程编号是 6.00.1,是计算机科学及工程学院的经典课程.之前,课程一直使用 Scheme 作为教学语言,不过由于 Python 简单.易学等原因,近年来已经改用 ...