想着给自己的博客加评论功能,然后想着没登录也不太行,正好之前在公司实习有做过飞书集成相关的事情,于是就打算给自己的网站集成个qq登录。
过程繁琐,而且qq互联给的文档简陋,坑多,所以记录一下。
1.首先去qq互联申请一个app(前提已经有域名了,没域名申请不到)
此处有几个大坑,一个是网站名称一定要和你申请域名时备案的网站名称一样
然后就是提供方,是腾讯云就填腾讯云,是阿里云就填阿里云
另外就是回调域,这个通常就是在你自己的域名后加上一个路径,例如集成qq登录,就填一个http://www.[你自己的域名].com/qqlogin,这个后期会用来接收用户授权后回调的一些参数。
另外一个最大的坑就是,你的网站主页必须要有qq登录的按钮!! 像下面这样,不然不会给你审核通过的,按钮在qq互联文档里有
申请之后大概2-3天会发邮件通知有没有通过,最好一次过,像我在这一步直接耽误了半个月…
2.申请通过后拿到appId和appSecret就可以开始做集成了
给按钮绑定点击事件,访问文档里提到的这个链接,拼上参数,四个必填的,里面client_id就是申请通过的appId,redirect_uri就是之前申请时填写的回调域地址,一定要一样,不然用户没法授权。
现在这个点击事件,点击后会调到一个非常熟悉的授权页面,如下
然后用户点击头像授权,或者扫码,或者输入账号密码登录,就会跳转到我们写好的回调域的地址,并在后面带上coede
这个时候就需要我们在前端的路由里拿到这个code,并且走下一步
下一步,用这个code带上appid , app_secret,去请求token,这一步要交给后端去做,我直接在前端请求会被跨域拦截,有大神可以尝试一下前端能不能拿到,
我个人前端收到code后,触发方法去请求后端,把这些需要的参数带给后端,然后让后端去发起请求获得access token,
然后这里有个坑,就是里面有个可选的参数,叫fmt,最好是填上,值为’json’,不然返回来的token是url的格式,还得用正则去处理
后端拿到token后就可以走第三步
3.用token拿到用户的openId,
和第二步一样的操作,而且从拿token开始,我的请求发起都在后端,前端可能会跨域拿不到(token就是)
4.用openid拿到用户信息
有了openId,基本上就ok了,可以去掉qq的开放api了,不过api很少,居然还有腾讯微博的api…
也是一样的方式,参数是token, appid和 openid,就可以拿到用户的信息了,里面有网名,头像,年龄,城市一些基本信息,
然后后端可以存起来,顺便返回给前端,然后前端就可以做显示,或者存cookie都ok.