联系官方销售客服

1835022288

028-61286886

开发框架 版主:迅睿框架研发组
最新版本在后台添加用户的时候一直提示账号名不允许注册请问大家
类型:迅睿CMS 更新时间:2021-01-18 14:24:32 后台 用户

最新版本(4.3.13)在后台添加用户的时候一直提示"账号名不允许注册"。请问大家有这个问题吗?


{xunruicms_img_title}


后台用户设置这都是默认设置:

{xunruicms_img_title}

回帖
  • 迅睿框架技术-景攸
    #1楼    迅睿框架技术-景攸
    2021-01-18 10:26:38
    小米手机 0
    是win服务器吗
  • 初次使用
    #2楼    初次使用
    2021-01-18 10:30:25
    Chrome 0
    你是不是设置错了账号的正则表达式
  • 易享网络
    #3楼    易享网络
    2021-01-18 10:32:27
    Edge 0
    迅睿框架技术-景攸 Linux8.2 PHP8.0
  • 易享网络
    #4楼    易享网络
    2021-01-18 10:32:58
    Edge 0
    初次使用 正则这里也是留空的

  • 迅睿框架技术-景攸
    #5楼    迅睿框架技术-景攸
    2021-01-18 10:37:56
    小米手机 0
    不允许账号的字符串,看看是否存在回车空白等
  • 易享网络
    #6楼    易享网络
    2021-01-18 10:42:34
    Edge 0
    迅睿框架技术-景攸 试过很多了组合了都不行,简单的复杂的,长的短的都不行,奇了怪了
  • 迅睿框架技术-景攸
    #7楼    迅睿框架技术-景攸
    2021-01-18 10:49:01
    小米手机 0
    不允许账号的字符串,看看是否存在回车空白等,或者输入admin,然后保存再注册
  • 易享网络
    #8楼    易享网络
    2021-01-18 12:16:41
    Edge 0

    迅睿框架技术-景攸 感谢回复,自己排查了一下,发现/dayrui/Fcms/Library/Form.php存在一处bug:

    public function check_username($value) {
            exong_test(0,$value,\Phpcmf\Service::C()->member_cache['register'],\Phpcmf\Service::C()->member_cache['register']['notallow']);
            if (!$value) {
                return dr_return_data(0, dr_lang('账号不能为空'), ['field' => 'username']);
            } elseif (\Phpcmf\Service::C()->member_cache['register']['preg']
                && !preg_match(\Phpcmf\Service::C()->member_cache['register']['preg'], $value)) {
                return dr_return_data(0, dr_lang('账号格式不正确'), ['field' => 'username']);
            } elseif (strpos($value, '"') !== false || strpos($value, '\'') !== false) {
                return dr_return_data(0, dr_lang('账号名存在非法字符'), ['field' => 'username']);
            } elseif (\Phpcmf\Service::C()->member_cache['config']['userlen']
                && mb_strlen($value) < \Phpcmf\Service::C()->member_cache['config']['userlen']) {
                return dr_return_data(0, dr_lang('账号长度不能小于%s位,当前%s位', \Phpcmf\Service::C()->member_cache['config']['userlen'], mb_strlen($value)), ['field' => 'username']);
            } elseif (\Phpcmf\Service::C()->member_cache['register']['notallow']) {
                // 放在最后一次比较
                foreach (\Phpcmf\Service::C()->member_cache['register']['notallow'] as $a) {
                    if (strpos($value, $a) !== false) {
                        return dr_return_data(0, dr_lang('账号名不允许注册'), ['field' => 'username']);
                    }
                }
            }
    
            return dr_return_data(1, 'ok');
        }

    其中的

     } elseif (\Phpcmf\Service::C()->member_cache['register']['notallow']) {

    一直为true。

    说明如下:

    查看数据库发现member_cache['register']['notallow']默认为[""],在php8里,if([""])一直为true,所以这里不管怎么设置都会进入下面的判断体,导致在后台增加用户名时,如果没有设置禁止注册的用户名,会一直提示“账号名不允许注册”。请老大修复一下。




    最近服务器更新了php8,感觉迅睿框架在php8的兼容性上还有很多的小bug,还是希望老大能仔细排查一下程序,避免因为这些小毛病影响了咱们迅睿框架的感知。辛苦了。

    满意答案
  • 黄老邪
    #9楼    黄老邪
    2021-01-18 12:18:38
    Chrome 0
    楼主不太了解php啊,if([""])本身就是正确的代码啊
  • 易享网络
    #10楼    易享网络
    2021-01-18 12:23:08
    Edge 0
    黄老邪 我知道if([""])是正确的代码,只是这个判断永远都为true,那还加这个判断干什么,直接执行if里边的foreach循环体就行了啊。不纠结了,老大刚刚已经修复这个bug了
  • 易享网络
    #11楼    易享网络
    2021-01-18 14:24:32
    Edge 0
    @易享网络:本帖已结束