点击登录
  • 欢迎访问无限星辰技术博客,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏无限星辰吧
  • 好集导航开张了,传送门:好集导航

phpcmsV9 BUG– QQ互联登录后 重复提示注册

Phpcms知识库 crx349 7537次浏览 0个评论 扫描二维码

QQ现在是非常普及的东西,想让用户可以通过QQ 一键登录到 phpcms V9 v9.3.1版本 现在还有点困难。
在经过一上午的折腾,看完各位大虾的分析之后,才发现,这个版本中的问题 都不是 改phpcmsV9 源代码能搞定的。
现象描述:
1,在phpcmsV9后台 设置 > 相关设置 > connect > 按照提示 填写 QQ号码登录的API ID 和APP key 木有的童鞋 点击后面的链接 去申请一个,免费滴。。
如图
phpcmsV9 BUG-- QQ互联登录后 重复提示注册

phpcmsV9 BUG-- QQ互联登录后 重复提示注册
登陆成功后 提示注册, 当再次点击登录时仍然 提示要完善注册信息。QQ一键登录的效果并没达到。
为此:百度了好久没有找到合适的答案。
于是翻看phpcmsV9源码
文件地址: phpcms\modules\member\index.php 1417行 方法名如下:

 //QQ登录功能
public function public_qq_login2(){
....
 if(!empty($_SESSION['openid'])){
                                $r = $this->db->get_one(array('connectid'=>$_SESSION['openid'],'from'=>'qq'));
                                if(!empty($r)){
                                        //登陆
                                        $password = $r['password'];
                                        $this->_init_phpsso();
                                        $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);
                                        $userid = $r['userid'];
                                        $groupid = $r['groupid'];
                                        $username = $r['username'];
                                        $nickname = empty($r['nickname']) ? $username : $r['nickname'];
                                        $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid));
                                        if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');
                                        $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime: 0);
                                        $cookietime = $_cookietime ? TIME + $_cookietime : 0;
                                        $phpcms_auth_key = md5(pc_base::load_config('system', 'auth_key').$this->http_user_agent);
                                        $phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', $phpcms_auth_key);
                                        param::set_cookie('auth', $phpcms_auth, $cookietime);
                                        param::set_cookie('_userid', $userid, $cookietime);
                                        param::set_cookie('_username', $username, $cookietime);
                                        param::set_cookie('_groupid', $groupid, $cookietime);
                                        param::set_cookie('cookietime', $_cookietime, $cookietime);
                                        param::set_cookie('_nickname', $nickname, $cookietime);
                                        $forward = isset($_GET['forward']) && !empty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index';
                                        showmessage(L('login_success').$synloginstr, $forward);
                                }else{
                                        $user = $info->get_user_info();
                                        $_SESSION['connectid'] = $_SESSION['openid'];
                                        $_SESSION['from'] = 'qq';
                                        $connect_username = $user['nickname'];
                                        include template('member', 'connect');
                                }
                        }

——————————————————————————————–
推敲一下可以看到 红色部分的代码是关键,最主要的是这一句:
$r = $this->db->get_one(array(‘connectid’=>$_SESSION[‘openid’],’from’=>’qq’));
说明在用户表里面没有找到 腾讯传过来的openid相关联并且form(注册方式)为qq的记录,因为识别为没有注册过,跳转到继续完善资料页面。
一头扎到数据库查询 v9_member 表,果然connectid字段的数据只有腾讯传过来openid(32位的长度)的前15个字符,
一个看表结构发现这个字段的定义是
`connectid` CHAR(15) NOT NULL DEFAULT ”
问题找到了: 字段长度不够,执行以下SQL 更新字段长度
ALTER TABLE v9_member MODIFY `connectid` CHAR(32) NOT NULL DEFAULT ”;
清除刚才注册的数据(v9_member和`v9_sso_members`表的记录) 或者换个qq再注册,因为QQ不能重复注册。
再次注册 发现问题解决,注册之后的用户,再次登录之后直接点击 QQ登录 即可一键登录。


无限星辰 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明phpcmsV9 BUG– QQ互联登录后 重复提示注册!
喜欢 (0)
[]
分享 (0)

您必须 登录 才能发表评论!