PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > CMS教程 > phpcms教程 > 正文

    phpcms邮箱修改二次认证失败的原因和解决办法

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:原因,phpcms的bug,传输userid失败导致的。原来的代码如下 /* * 测试邮件配置 */ public function send_newmail() { $_use...
     原因,phpcms的bug,传输userid失败导致的。
    原来的代码如下

        /*
         * 测试邮件配置
         */
        public function send_newmail() {
            $_username = param::get_cookie('_regusername');
            $_userid = param::get_cookie('_reguserid');
            $_ssouid = param::get_cookie('_reguseruid');
            $newemail = $_GET['newemail'];

            if($newemail==''){//邮箱为空,直接返回错误
                return '2';
            }
            $this->_init_phpsso();
            $status = $this->client->ps_checkemail($newemail);
            if($status=='-5'){//邮箱被占用
                exit('-1');
            }
            if ($status==-1) {
                $status = $this->client->ps_get_member_info($newemail, 3);
                if($status) {
                    $status = unserialize($status);    //接口返回序列化,进行判断
                    if (!isset($status['uid']) || $status['uid'] != intval($_ssouid)) {
                        exit('-1');
                    }
                } else {
                    exit('-1');
                }
            }
            //验证邮箱格式
            pc_base::load_sys_func('mail');
            $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key'));
            $code = sys_auth($userid.'|'.SYS_TIME, 'ENCODE', $phpcms_auth_key);
            $url = APP_PATH."index.php?m=member&c=index&a=register&code=$code&verify=1";
            
            //读取配置获取验证信息
            $member_setting = getcache('member_setting');
            $message = $member_setting['registerverifymessage'];
            $message = str_replace(array('{click}','{url}','{username}','{email}','{password}'), array('<a href="'.$url.'">'.L('please_click').'</a>',$url,$_username,$newemail,$password), $message);
            
             if(sendmail($newemail, L('reg_verify_email'), $message)){
                //更新新的邮箱,用来验证
                 $this->db->update(array('email'=>$newemail), array('userid'=>$_userid));
                $this->client->ps_member_edit($_username, $newemail, '', '', $_ssouid);
                $return = '1';
            }else{
                $return = '2';
            }
            echo $return;
           }

      
    修改后的如下:

        /*
         * 测试邮件配置
         */
        public function send_newmail() {
            $_username = param::get_cookie('_regusername');
            $_userid = param::get_cookie('_reguserid');
            $_ssouid = param::get_cookie('_reguseruid');
            $newemail = $_GET['newemail'];

            if($newemail==''){//邮箱为空,直接返回错误
                return '2';
            }
            $this->_init_phpsso();
            $status = $this->client->ps_checkemail($newemail);
            if($status=='-5'){//邮箱被占用
                exit('-1');
            }
            if ($status==-1) {
                $status = $this->client->ps_get_member_info($newemail, 3);
                if($status) {
                    $status = unserialize($status);    //接口返回序列化,进行判断
                    if (!isset($status['uid']) || $status['uid'] != intval($_ssouid)) {
                        exit('-1');
                    }
                } else {
                    exit('-1');
                }
            }
            //验证邮箱格式
            pc_base::load_sys_func('mail');
            $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key'));
            $code = sys_auth($_userid.'|'.SYS_TIME, 'ENCODE', $phpcms_auth_key);
            $url = APP_PATH."index.php?m=member&c=index&a=register&code=$code&verify=1";
            
            //读取配置获取验证信息
            $member_setting = getcache('member_setting');
            $message = $member_setting['registerverifymessage'];
            $message = str_replace(array('{click}','{url}','{username}','{email}','{password}'), array('<a href="'.$url.'">'.L('please_click').'</a>',$url,$_username,$newemail,$password), $message);
            
             if(sendmail($newemail, L('reg_verify_email'), $message)){
                //更新新的邮箱,用来验证
                 $this->db->update(array('email'=>$newemail), array('userid'=>$_userid));
                $this->client->ps_member_edit($_username, $newemail, '', '', $_ssouid);
                $return = '1';
            }else{
                $return = '2';
            }
            echo $return;
           }

      
    ID传输失败就自然不知道是认证谁了,所以导致的老用户传输ID失败不能邮箱认证。
    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-101-1942-1.html
    相关热词搜索: