Discuz X3.1最新修改注册用户名长度限制

公司最近在做一个游戏论坛,需要JAVA项目和Discuz同步登陆和退出,JAVA项目那边用了 discuz-ucenter-api-for-java 这个开源项目,那边的用户名是邮箱或者手机号码,长度肯定不止15个字符(邮箱账号的话@xxx.xxx就占了好几位),而Discuz的用户名也已经限制了长度,没办法,只能改源码了。我对DZ源码也不熟,于是在官方论坛搜了一大通,发现一帮人需要解决这个问题,但是官方一般给出的解释是:不建议修改。DZ自从被TX收购以后,节操掉的也差不多了,不愧为乌云上最无良厂商之一。遂去google了一下,虽然有一些提到,但都是X1.5,X2的,已经不适合新版的DZ了。

下面给出个人总结的解决办法:

1、 添加用户函数,修改source\class\class_member.php,定位578行,把

} elseif($usernamelen > 15) {

修改为(不一定要改为32,你需要多少位都可以,下同):

} elseif($usernamelen > 32) {

2、AJAX验证,修改source\module\forum\forum_ajax.php,定位22行,把

} elseif($usernamelen > 15) {

修改为:

} elseif($usernamelen > 32) {

3、前端js验证,修改static\js\register.js,定位281、282行,把

if(unlen < 3 || unlen > 15) {
		errormessage(id, unlen < 3 ? '用户名不得小于 3 个字符' : '用户名不得超过 15 个字符');

修改为:

if(unlen < 3 || unlen > 32) {
		errormessage(id, unlen < 3 ? '用户名不得小于 3 个字符' : '用户名不得超过 32 个字符');

4、Ucenter中的用户名过滤,修改uc_client\model\user.phpuc_server\model\user.php,同样定位到44行,把

if(len>15 ||len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|guestexp/is",username)) {

修改为:

if(len>32 ||len < 3 || preg_match("/\s+|^c:\\con\\con|[%,\*\"\s\<\>\&]|guestexp/is",username)) {

5、接着修改模板注册页面表单的长度的限制,修改template\default\member\register.htm,定位到125行,把

<td><input type="text" id="{$this->setting['reginput']['username']}" name="" class="px" tabindex="1" autocomplete="off" size="25" maxlength="15" required /></td>

修改为:

<td><input type="text" id="{$this->setting['reginput']['username']}" name="" class="px" tabindex="1" autocomplete="off" size="25" maxlength="32" required /></td>

6、然后修改语言包,修改source\language\lang_message.php,定位到230行,把

 'profile_username_toolong' => '抱歉,您的用户名超过 15 个字符,请输入一个较短的用户名',

修改为:

 'profile_username_toolong' => '抱歉,您的用户名超过 32 个字符,请输入一个较短的用户名',

7、接着修改语言包,修改source\language\member\lang_template.php,定位到52行,把

 'register_username_tips' => '用户名由 3 到 15 个字符组成',

修改为:

 'register_username_tips' => '用户名由 3 到 32 个字符组成',

8、最后是修改数据库的用户名长度限制,因为字段属性为 char(15),varchar(15),char(20)等等,我们统一修改它为 varchar(32),当然你要自己定义也无妨,复制和运行以下SQL语句即可:

ALTER TABLE `pre_common_adminnote` modify column `admin`  varchar(32);
ALTER TABLE `pre_common_banned` modify column `admin`  varchar(32);
ALTER TABLE `pre_common_diy_data` modify column `username`  varchar(32);
ALTER TABLE `pre_common_grouppm` modify column `author`  varchar(32);
ALTER TABLE `pre_common_member` modify column `username`  varchar(32);
ALTER TABLE `pre_common_member_crime` modify column `operator`  varchar(32);
ALTER TABLE `pre_common_member_validate` modify column `admin`  varchar(32);
ALTER TABLE `pre_common_mytask` modify column `username`  varchar(32);
ALTER TABLE `pre_common_report` modify column `username`  varchar(32),modify column `opname`  varchar(32);
ALTER TABLE `pre_common_session` modify column `username`  varchar(32);
ALTER TABLE `pre_common_word` modify column `admin`  varchar(32);
ALTER TABLE `pre_common_card_log` modify column `username`  varchar(32);
ALTER TABLE `pre_common_failedlogin` modify column `username`  varchar(32);
ALTER TABLE `pre_common_invite` modify column `fusername`  varchar(32);
ALTER TABLE `pre_common_member_verify_info` modify column `username`  varchar(32);
ALTER TABLE `pre_forum_announcement` modify column `author`  varchar(32);
ALTER TABLE `pre_forum_collection` modify column `username`  varchar(32),modify column `lastposter`  varchar(32);
ALTER TABLE `pre_forum_collectioncomment` modify column `username`  varchar(32);
ALTER TABLE `pre_forum_collectionfollow` modify column `username`  varchar(32);
ALTER TABLE `pre_forum_collectionteamworker` modify column `username`  varchar(32);
ALTER TABLE `pre_forum_creditslog` modify column `fromto`  varchar(32);
ALTER TABLE `pre_forum_forumrecommend` modify column `author`  varchar(32);
ALTER TABLE `pre_forum_groupuser` modify column `username`  varchar(32);
ALTER TABLE `pre_forum_order` modify column `admin`  varchar(32);
ALTER TABLE `pre_forum_pollvoter` modify column `username`  varchar(32);
ALTER TABLE `pre_forum_post` modify column `author`  varchar(32);
ALTER TABLE `pre_forum_postcomment` modify column `author`  varchar(32);
ALTER TABLE `pre_forum_promotion` modify column `username`  varchar(32);
ALTER TABLE `pre_forum_ratelog` modify column `username`  varchar(32);
ALTER TABLE `pre_forum_rsscache` modify column `author`  varchar(32);
ALTER TABLE `pre_forum_thread` modify column `author`  varchar(32),modify column `lastposter`  varchar(32);
ALTER TABLE `pre_forum_threadmod` modify column `username`  varchar(32);
ALTER TABLE `pre_forum_trade` modify column `seller`  varchar(32),modify column `lastbuyer`  varchar(32);
ALTER TABLE `pre_forum_tradecomment` modify column `rater`  varchar(32),modify column `ratee`  varchar(32);
ALTER TABLE `pre_forum_tradelog` modify column `seller`  varchar(32),modify column `buyer`  varchar(32);
ALTER TABLE `pre_forum_warning` modify column `operator`  varchar(32),modify column `author`  varchar(32);
ALTER TABLE `pre_home_album` modify column `username`  varchar(32);
ALTER TABLE `pre_home_blog` modify column `username`  varchar(32);
ALTER TABLE `pre_home_clickuser` modify column `username`  varchar(32);
ALTER TABLE `pre_home_comment` modify column `author`  varchar(32);
ALTER TABLE `pre_home_docomment` modify column `username`  varchar(32);
ALTER TABLE `pre_home_doing` modify column `username`  varchar(32);
ALTER TABLE `pre_home_feed` modify column `username`  varchar(32);
ALTER TABLE `pre_home_feed_app` modify column `username`  varchar(32);
ALTER TABLE `pre_home_follow` modify column `username`  varchar(32),modify column `fusername`  varchar(32);
ALTER TABLE `pre_home_follow_feed` modify column `username`  varchar(32);
ALTER TABLE `pre_home_follow_feed_archiver` modify column `username`  varchar(32);
ALTER TABLE `pre_home_friend` modify column `fusername`  varchar(32);
ALTER TABLE `pre_home_friend_request` modify column `fusername`  varchar(32);
ALTER TABLE `pre_home_notification` modify column `author`  varchar(32);
ALTER TABLE `pre_home_pic` modify column `username`  varchar(32);
ALTER TABLE `pre_home_poke` modify column `fromusername`  varchar(32);
ALTER TABLE `pre_home_share` modify column `username`  varchar(32);
ALTER TABLE `pre_home_show` modify column `username`  varchar(32);
ALTER TABLE `pre_home_specialuser` modify column `username`  varchar(32),modify column `opusername`  varchar(32);
ALTER TABLE `pre_home_visitor` modify column `vusername`  varchar(32);
ALTER TABLE `pre_portal_rsscache` modify column `author`  varchar(32);
ALTER TABLE `pre_portal_topic_pic` modify column `username`  varchar(32);
ALTER TABLE `pre_ucenter_admins` modify column `username`  varchar(32);
ALTER TABLE `pre_ucenter_badwords` modify column `admin`  varchar(32);
ALTER TABLE `pre_ucenter_feeds` modify column `username`  varchar(32);
ALTER TABLE `pre_ucenter_members` modify column `username`  varchar(32);
ALTER TABLE `pre_ucenter_mergemembers` modify column `username`  varchar(32);
ALTER TABLE `pre_ucenter_protectedmembers` modify column `username`  varchar(32),modify column `admin`  varchar(32);

友情提醒1 如果你用了我的马甲插件,还要执行这句:

ALTER TABLE `pre_myrepeats` modify column `username`  varchar(32);

友情提醒2 安装插件的时候最好也看看有没有涉及到用户名的字段,有的话也要修改。

修改完成:

無名の QQ スクリーンショット20140320105953

这篇文章有34条评论

  1. Ggicci 2014/3/22 #1 回复TA

    官方提供一个可配置选项就好了,扫了一下酱紫真的折腾啊__________________________

  2. Sapphirell 2014/3/22 #2 回复TA

    橙酱菊苣

  3. Kunr 2014/3/23 #3 回复TA

    菊苣/w discuz 很坑爹的 (不过在插件模板 的机制方面比pw好
    (pw那叫麻烦死人

  4. 新的一周,祝充满能量,开心面对每一天!

  5. maillot trek 2014/3/27 #5 回复TA

    博主是做游戏开发的?

  6. 长长的代码

  7. 要改这么多地方额

  8. 文字头像吧 2014/7/11 #8 回复TA

    先来关注下了哈。

  9. 看了下,国外的论坛也没有超越discuz的~~~

  10. sxqfire 2015/11/27 #10 回复TA

    非常感谢楼主,省了好多事,万分感谢

  11. 宅牛 2016/8/8 #11 回复TA

    正好需要,楼主神人,感谢感谢!

发表评论戳我取消回复

*

List
Love
00:00