第三方授权登录能够直接使用已有的QQ号、微信等登录。减少了注册环节,减少了因为注册而流失的用户。可以直接获取用户昵称、头像等信息,省去再次填写昵称、上传头像的麻烦。下面说说第三方授权登录正确的开发方式。
项目中涉及到3种授权登录形式,分别是微信、QQ和新浪微博。3种平台授权登录的流程大同小异,都是需要在其对应的开放网站上注册应用且产生appid及appsecert(或类似的其它叫法),并利用上述参数按照ahth2方式授权登录。授权的具体流程不是本文讨论的重点,在此略过。授权登录成功后获取到你的应用相对于授权平台的唯一标识(微信、QQ叫openid,新浪微博叫uid)。这时候你要注意了,如果你此时开发的应用场景为移动App应用,并且将来打算开发相应的网页版的项目(反之亦然),你不仅仅需要保存微信、QQ的openid。你还需要想办法获取联合id -unionid(姑且这样称呼它吧)。如何获取呢?下面我来分别说明下。
微信
目前,微信的第三方授权登录是由微信开放平台来承载的。根据其最新的文档,用户通过微信授权登录同时用户授权了获取userinfo时,则授权成功后会出现unionid字段,即微信开放平台会同时返回用户的openid和unionid(移动应用微信登录开发指南)。开发者只需要将openid和unionid都保存到数据库即可。
QQ授权登录平台要想保存unionid可能要稍微麻烦一点。需要联系QQ客服申请获取unionid的全限。详见常见问题 - 文档资料--QQ互联的问题1。按照其要求发送邮件申请unionid的访问权限即可。正常情况下QQ客服会很快开通权限并回复开发者的申请邮件,并在邮件中比较详细的说明调用接口获取unionid的方式。
新浪微博
还是新浪大大好,新浪微博的移动App和网页版的唯一标识都是统一的uid,无需做额外的操作。
上面说了这么多,现在来说明下为什么要这么做。已经保存了openid,为什么还要保存unionid呢?其实可能有些读者已经发现了一些端倪。因为在微信、QQ这两个平台注册应用,移动端App和网页版应用会生成不同的appid,而不同的appid相对应的就是不同的openid。如果不保存unionid,就会出现,同一个微信账号(或QQ号)登录开发者的网页版和移动端App会生成两个不同的第三方账号的尴尬。如果开发者没有意识到本文所说的问题,且已经将服务部署到开发环境了,且又有开发其他终端授权登录的需求,该如何是好?本人将在下篇文章“第三方授权登录踩过的坑”中解答。