第三方联合登录一般可以降低网站的获客成本,所以一般的网站都会做一些联合登录,常用的就是qq、微信、微博了,下面简单的介绍一下这些联合登录的方法。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwIzM0MjMzEjM3ATMxYTMwIzLcRXZu5ibkN3Yuc2bsJmLn1Wavw1LcpDc0RHaiojIsJye.jpg)
看了一号店的qq登录源码可知,点击图标直接访问的是这个链接
<a href="https://passport.yhd.com/qq/login.do?tp=2.0.0.0.0.lwyye4h-10-c%60toe&ti=h2h3vt">https://passport.yhd.com/qq/login.do?tp=2.0.0.0.0.lwyye4h-10-c`toe&ti=h2h3vt</a>
它首先请求的是自己网站的请求,后面那两个参数应该没用,大家自己项目可以不用加,不过抓包能看出来它在服务端做了一个重定向指向了腾讯的qq授权登录页面
<a href="https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=100234077&redirect_uri=https://passport.yhd.com/qq/callback.do&scope=get_user_info&state=6172a6f6f311570fe739e96be57b6a67">https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=100234077&redirect_uri=https://passport.yhd.com/qq/callback.do&scope=get_user_info&state=6172a6f6f311570fe739e96be57b6a67</a>
这里一号店只申请了昵称头像性别的权限,一般都会同意的。
接下来就是qq的重定向了,qq自己到了这个请求。
<a href="https://graph.qq.com/oauth/show?which=login&display=pc&response_type=code&client_id=100234077&redirect_uri=https://passport.yhd.com/qq/callback.do&scope=get_user_info&state=6172a6f6f311570fe739e96be57b6a67">https://graph.qq.com/oauth/show?which=login&display=pc&response_type=code&client_id=100234077&redirect_uri=https://passport.yhd.com/qq/callback.do&scope=get_user_info&state=6172a6f6f311570fe739e96be57b6a67</a>
但是当qq回调你方法的时候就成了这样
<a href="https://passport.yhd.com/qq/callback.do?code=78df205e46bfece1d22d31fd77bfd925&state=8625864ecaa9b8424aa40a7e12b4cdb9">https://passport.yhd.com/qq/callback.do?code=78df205e46bfece1d22d31fd77bfd925&state=8625864ecaa9b8424aa40a7e12b4cdb9</a>
在这里qq加上了一个code参数和state参数,code是用来获取token值的,只有10分钟有效期,state参数是让你校验你的请求有没有被篡改,如果被篡改,你得有相应的处理。在这个回调方法里,我们得按照qq联合登录的文档用申请qq登录所分发的appid和appkey来获取token,
获取完token,你就得按文档再根据token去获取用户的openid
当走到这里时,你已经得到了用户的openid和其他的用户信息,应为openid是唯一的,所以不可能重复,这时候整个联合登录就已经走完了。你可以根据openid给用户在你的站内创建一个账号,设置登录token,认为用户已经登录了。
qq联合登录说的这么清楚了,其实微信联合登录也是这个套路,具体看文档调接口就可以了
<a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=%e2%8c%a9=zh_cn">微信联合登录</a>
<a href="https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316518&token=%e2%8c%a9=zh_cn">微信联合登录查询用户信息</a>
如果你的微信开放平台下有多个应用,你可以用appid+unionid的形式来保证用户id的唯一性。