mybb论坛里实现qq互联登录

Life is short , play more!
本文来自lihao's Blog,转载请注明。

昨天晚上研究了下qq帐号登录oauth在mybb上的实现。 因为mybb是php代码开发, 所以直接下载了qq的php sdk, 想必应该可以很快搞定,但是实际上却浪费了半天多的时间。

下面总结下遇到的问题吧。

插个话题, 为什么没有使用discuz呢。 Discuz!和PHPWind功能日益膨胀,早已超越了论坛程序的范畴,绝对算是cms,近两年来的版本作为单纯论坛使用的话,略显臃肿。 mybb功能则非常简单,但基本的功能却不弱。 其实简单实用,适合就是最好的。 discuz 功能确实大的让人害怕。  另外mybb简单,其实有利于二次开发,我也不算上开发了,也就是乱抓的简单改一些代码。 

1.   下载qq 的php sdk。

2.  在mybb 根目录下建一个qq的目录,将sdk都放置进去。

3.  在qq互联的控制面板里, 设置好回调地址。 因为第二步我们把需要的程序已经放好,所以回调地址也就确定了。 我这里就直接默认使用 qq的qq_login.php 和 qq_callback.php.  qq_login 是登录时调用的,  qq_callback 是 qq登录成功后回调的地址。

大致流程(前提申请好appid哦) :  

1) 论坛页面放上一个qq三方登录的图片或者文字链接,这里要符合人家qq的规范要求 。

2)  这个qq登录的图片 , 链接到 qq_login.php

3) qq_login.php 将 referer记录到session里, 便于完成qq登录后,回到原来的页面。 qq_login.php 执行后, 会打开qq的登录页面。

4) qq登录完成后,回调到 qq_callback.php(已经在qq官方的控制后台里设置好了) ,我们在 qq_callback.php 里验证用户正确登录成功,(qq_callback 这里有一段已经写好的防止 csrf的代码,具体可以去这里了解)

5)  然后qq_callback.php 自动在论坛里注册一个帐号, 然后自动帮你登录。 qq_callback.php 里完成的mybb的这些功能,是需要自己加进去的,因为人家qq_callback.php 里的只是校验qq登录成功与否,登录成功你还是要加入自己的处理逻辑。(这里为了方便用户, 很多太多的网站,让你登录后, 还他娘的让你绑定帐号, 擦擦的。 虽然这些网站是为了自己的网站注册用户多, 不过实在让人不爽:-)。)

中间碰到的问题。

1) callback里要调用mybb的程序代码, 但是mybb的程序代码小部分代码组织的并不是非常好,也可能是本人能力有限, 例如 member.php 中, 代码并没有很好的函数话,不利与重用。 所以只能摘抄了部分内容, copy出来。 因为qq登录经过了qq 那边的认证, 所以我在自己的这边 member.php 和 user.php 中登录的过程, 不需要过多的验证, 所以只需要部分的重要逻辑代码即可。 一 就是 注册用户,  二  注册完后,或者此用户是回头客, 那么需要自动登录。

2) 自动登录的过程, 需要引用login.php 类中的方法调用, 因为qq的sdk中的session.php 和  mybb中的session.php 两个类名一致, 所以哈哈。 required 的时候,就会报 不能redeclare session的错误。 所以只能找到qq sdk的session.php 把里面的类名改了。 毕竟这个qq sdk的php文件少, 好改。

3) qq sdk中的session 数据看样子是可以在数据库里管理的。 另外需要额外注意的是, cookie的域名一定要在 qq sdk里的 session.php 中设置成你的, 否则cookie里的phpsessionid 不正确,每次访问会生成一个新的,那么所有的session数据都无法正常使用。

主要解决了以上3个问题后,qq 在mybb中登录就没问题了。


发表评论

电子邮件地址不会被公开。 必填项已用*标注