请选择 进入手机版 | 继续访问电脑版
搜索
查看: 1628|回复: 0

phpcms QQ一键登录无法正常登录redirect uri is illegal(100010)

[复制链接]

72

主题

73

帖子

355

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
355
发表于 2016-8-17 18:48:49 | 显示全部楼层 |阅读模式
现在大家应该发现。所有phpcms的网站,QQ互联也就是QQ一键登录都用不了的。不知道大家发现一个问题没有,官方的phpcms.cn网站之前都是可以用QQ登陆的,现在也不行了,原因是腾讯有更新,而官方phpcms系统更新太慢,不知道那些大爷在干什么。

首页,我们来看看腾讯有啥子更新呢

phpcms QQ一键登录无法正常登录redirect uri is illegal(100010)

phpcms QQ一键登录无法正常登录redirect uri is illegal(100010)


对于大家这个更新如果没玩过QQ互联的大家也许不懂,我来解释下

上图所示,左边是QQ互联申请的后台地址,右边是phpcms后台填写的回调地址。

phpcms回调地址必须填写
  1. http://www.linyufan.com/index.php?m=member&c=index&a=public_qq_loginnew
复制代码

才能使用

而现在呢,腾讯qq的回调地址不允许带参数,否则无法提交,并且要与phpcms地址的回调地址一致,才能使用。qq互联回调地址和phpcms管理中心的回调地址不一样导致qq登录报错:redirect uri is illegal(100010)

那么问题来了,phpcms必须要带参数才能使用,而腾讯带上参数又不让使用,这不是很矛盾吗。到底如何解决这个问题呢,肯定不能让腾讯修改规则,而phpcms官方更新太慢。今天下午我看网上有人搜索这个问题,自己研究了下,现在公布给大家

首先第一步,将腾讯和phpcms后台的qq回调地址统一设置成你自己的网站域名www.linyufan.com下面说明中,网站都以本网站www.linyufan.com做说明,你自己填写的时候,写上你自己的网站域名即可)。

经过第一步后,点击自己网站上面的QQ登陆按钮,会显示登陆成功,并且登陆后直接返回了首页(其实没有登陆成功,只是读取了腾讯openid的数据,返回到了网站首页,phpcmss没有做任何登陆操作)

第二步,将第一步的中,腾讯qq和phpcms的网站回调地址改成www.linyufan.com/qqcode

重复第一步登陆QQ,登陆成功后,返回首页,大家注意浏览器url地址为。www.linyufan.com/qqcode?code=3CD919E33C50BAC0D6D56ABAC926CA62

现在接下来的目标是,将www.linyufan.com/qqcode?code=3CD919E33C50BAC0D6D56ABAC926CA62 这个地址,指向
  1. http://www.linyufan.com/index.php?m=member&c=index&a=public_qq_loginnew&code=3CD919E33C50BAC0D6D56ABAC926CA62
复制代码


这样phpcms才会处理腾讯返回过来的qq信息

第三步,伪静态处理

将更目录下.htaccess文件 加入
  1. RewriteCond %{QUERY_STRING} ^code=(.*)$
  2. RewriteRule ^qqcode index.php?m=member&c=index&a=public_qq_loginnew&code=%1 [L]
复制代码
这里不同的服务器规则不一样,我的是apache 。

现在大家明白第二步中URL为什么后台加个尾巴qqcode了吧,只是为了方便写伪静态而已,没有别的作用

经过第三步后,大家刷新自己的网站,用QQ登陆,可以显示登陆成功,也跳转到了补充信息页面。


说明:如果你到了这个步骤,如果登陆后页面是空百的

你的服务器可能因为file_get_contents无法请求https连接。

解决方案有3:
1.windows下的PHP,只需要到php.ini中把extension=php_openssl.dll前面的;删掉,重启服务就可以了。
2.linux下的PHP,就必须安装openssl模块,安装好了以后就可以访问了。
3.如果服务器你不能修改配置的话,那么就使用curl函数来替代file_get_contents函数,当然不是简单的替换,还有相应的参数配置才能正常使用curl函数。
我的网站就出现了空白,用网上搜索的方法一解决的,如果你网站不是空白,请忽略上面的文字,直接看下面图片吧,更坑爹呢
尼玛,好不容到了这步了,为啥用户名和昵称是乱码。
解决方法:
在phpcms/modules/member/index.php 大概第1348行
$connect_username = $user['nickname']; 改成$connect_username = $user;
if里面两个地方都要改

然后再重复登陆操作


这样就正常了。按道理来说,这里注册后,绑定QQ就能登陆了。可是,尼玛,不管输入什么都是说系统已经存在!!


真的是一步一个坑啊,今天研究到这里,后面的慢慢来弄吧,希望大家踊跃给我留意,把下面的问题一起来解决

持续更新中(已解决上述问题)

phpcms QQ一键登录无法正常登录redirect uri is illegal(100010)

phpcms QQ一键登录无法正常登录redirect uri is illegal(100010)


上述ajaxValidator表单验证出错的原因是,启用了伪静态,导致ajax提交地址出错

修改方法:

打开网站文件/templates/default/member/connect.html

找到下面代码

//修改用户名验证,大概在201行
url : "",  
data :"m=member&c=index&a=public_checkname_ajax",  
替换成
  1. url : "http://www.linyufan.com/index.php?m=member&c=index&a=public_checkname_ajax",
  2. data :"http://www.linyufan.com/index.php?m=member&c=index&a=public_checkname_ajax",
复制代码
//修改用邮箱验证,大概在221行
url : "",
data :"m=member&c=index&a=public_checkemail_ajax",
替换成
  1. url : "http://www.linyufan.com/index.php?m=member&c=index&a=public_checkemail_ajax",
  2. data :"http://www.linyufan.com/index.php?m=member&c=index&a=public_checkemail_ajax",
复制代码
//修改用昵称验证,大概在238行
url : "",
data :"m=member&c=index&a=public_checknickname_ajax",
替换成
  1. url : "http://www.linyufan.com/index.php?m=member&c=index&a=public_checknickname_ajax",
  2. data :"http://www.linyufan.com/index.php?m=member&c=index&a=public_checknickname_ajax",
复制代码
总共需要提供的地方有三个,分别是用户名验证,邮箱验证,昵称验证,代码分别在第202行,第221行和238行左右

phpcms QQ一键登录无法正常登录redirect uri is illegal(100010)

phpcms QQ一键登录无法正常登录redirect uri is illegal(100010)



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热议作品
精华帖子排行
精彩推荐
发布主题 快速回复 返回列表 官方QQ群

努力、专心、专注!

为我们吹过的牛逼奋斗终身!

Copyright © 2015 林羽凡 Inc. 京ICP备11043715号-5

返回顶部 返回列表