网站接入QQ登录功能的实现

news/2024/5/20 2:06:47/文章来源:https://blog.csdn.net/itcodexy/article/details/117268695


来源 | https://github.com/Dream4ever/Knowledge-Base/issues/76

说明

本文中所说的QQ登录功能,是采用官方的OAuth2.0来实现的,这样有更多的自主权。另一种较为简单的js-SDK开发方式,虽然非常简便,但自主性不够,所以没有采用。

下文中所构造的URL,均使用了JavaScript的ES6语法。

注册开发者

先登录QQ互联官网,登录时所用的QQ号会和相关信息绑定,这一点要注意。

登录之后点击顶部导航栏右侧自己的QQ头像,进入开发者的注册/认证界面。

这里可以选择以“公司”或“个人”的身份注册为开发者。自己最开始用的是公司的相关资料来注册的,但总是提示审核失败,却又不说为什么失败,最后干脆用个人信息注册,很快就成功了。

PS:不知道用个人信息注册为开发者的话,权限方面会不会有什么限制。微信公众平台对个人开发者是有限制的,个人身份注册的公众号无法认证,公众平台的部分权限也无法调用。

创建网站应用

要想让网站能够使用QQ登录功能,就必须先在QQ互联中创建网站应用。

在QQ互联网站顶部导航栏上,点击应用管理。点击页面中的网站应用这个标签,再点击创建应用,按照要求填写相关的信息即可。

注意这里需要填写两个 URL,一个是网站地址,也就是需要让用户能够通过QQ登录的网站。另一个是网站回调域,则是用户发起QQ登录请求之后,负责与腾讯服务器通讯,实现QQ登录功能的URL,这两个URL要注意区分。

所创建的网站应用审核通过之后,点击查看按钮,在网站应用的详情界面,能看到为这个网站分配的APP ID和APP Key,后面实现QQ登录功能的时候要用到。

另外,还能看到审核通过的网站应用,有两个可用的应用接口,第一个登录默认是开启的,第二个unionid需要手动开启,这里先把它开启了,后面说不定就用上了。

流程概述

接下来就需要编写代码,实现QQ登录功能了。这里先简要说明一下整体流程:

  1. 按照要求访问指定网址,会显示QQ登录界面,选择QQ账号进行登录之后,会向之前所填写的 网站回调域 发起回调,回调URL中包含Authorization Code(授权码)。

  2. 网站回调域 用这个Authorization Code(授权码),结合其它数据,向指定的地址发送请求,接收到的响应中包含Access Token(访问令牌)。

  3. 网站回调域 再用Access Token(访问令牌) 向指定的地址发送请求,接收到的响应中包含所登录QQ账号的 OpenID(不涉及用户隐私)。

  4. 网站回调域 拿到用户的OpenID之后,结合前面获取到的Access Token以及其它数据,就可以调用QQ的接口,实现特定的功能了。比如可以调用get_user_info接口,获取登录用户的昵称、头像、性别,用来显示在前端页面中。

一、获取Authorization Code

在自己编写的登录页面,点击QQ图标之后,请求下面的地址:

https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=${appId}&redirect_uri=${redirectUrl}&state=${state}&scope=${scope}

上面的地址中,appId为网站应用的APP ID,redirectUrl为网站应用的网站回调域,state为用户自定义的字符串,scope为向用户所请求的授权列表。

scope之外的参数均为必填项,scope如果不写,则默认只请求对接口get_user_info进行授权,获取用户最基本的几项信息:QQ昵称、QQ头像、性别。

发起请求之后,会将用户导向到QQ官方的登录页面,用户在这个页面上选择需要登录的QQ号,点击“登录”,网站回调域就会收到的腾讯服务器所发起的回调。

比如之前所填写的 网站回调域 为a.com/api/getauthcode 的话,腾讯服务器就会向 网站回调域 发送如下请求:

GET /getauthcode?code=F91C6110********

在上面接收到的这个请求中,URL查询字符串里,code= 后面的字符串,就是腾讯服务器发来的Authorization Code。

二、获取Access Token

拿到Authorization Code,结合其它数据,请求如下地址:

https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=${appId}&client_secret=${appKey}&code=${authCode}&state=${state}&redirect_uri=${redirectUrl}

网站回调域 会收到如下响应:

access_token=FF3A****&expires_in=7776000&refresh_token=2516****

其中就包含了Access Token,并且这个Access Token有90天的有效期,但并不会按照官方文档所说的,用户再次登录时自动刷新,而是短时间(一天内)连续多次登录都不会刷新。

对于这个Access Token,官网建议开发者将其进行保存,以便后续调用OpenAPI访问和修改用户信息时使用。

三、获取OpenID

有了Access Token之后,就可以用它来获取当前所登录QQ账号的OpenID了。请求如下地址:

https://graph.qq.com/oauth2.0/me?access_token=${accessToken}

网站回调域 会收到如下响应:

callback( {"client_id":"appId","openid":"openId"} );

上面的响应中包含了 APP ID 和 OpenID,APP ID 可用来确认是否为合法的网站请求,OpenID 自然就是所登录QQ账号的 OpenID 了。

四、调用接口访问数据

有了第二步获取到的获取Access Token,和第三部获取到的 OpenID,就可以拿来访问QQ的接口,获取用户的相关信息了。

比如以下面的方式请求 get_user_info 接口,就能够获取到用户昵称、QQ头像等信息。

https://graph.qq.com/user/get_user_info?access_token=${accessToken}&oauth_consumer_key=${appId}&openid=${openId}

学习更多技能

请点击下方公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_727024.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打造设计师的“第二张脸”:25个精选作品集网站赏析

对于设计师来说,作品集不只是实力的最好证明,更是求职时的金牌敲门砖。一份集特色、美观、实用于一体的作品集,往往能在设计师求职过程中发挥重要的作用。如今,越来越多的设计师选择将作品集放在线上,以个人网站的形式…

GitHub项目:100 个知名网站源码

这个 GitHub 项目收集了世界上知名网站的源码,包括:谷歌、Youtube、IMDB、Instagram、Nike (sb)、Facebook、Stackoverflow、Twitter、Uber、Airbnb、亚马逊、就连最近爆火的 Clubhouse 也有。ONE.Youtube关于 Youtube 克隆项目的开源项目TWO.Twitter这是…

如何设计出色的网站后台原型?

我们常常听到这类型的需求:“数据面板设计”, “控制面板设计”, “仪表盘设计”或“后台界面设计”,它们基本都属于网站后台设计范畴。相比前端设计,网站后台原型设计难度往往更高。 为什么后台比前端原型设计更难? 我…

10 常见网站安全攻击手段及防御方法

公众号关注“程序IT圈”, 选择“星标”,重磅干货,第一时间送达!转自:数世咨询在某种程度上,互联网上的每个网站都容易遭受安全攻击。从人为失误到网络罪犯团伙发起的复杂攻击均在威胁范围之内。网络攻击者最…

前端工程师必备的17个实用网站

一、配色类网站http://colorhunt.cohttps://webgradients.com/180种渐变方案供你选择,还可以直接复制CSS样式应用到网页中https://color.adobe.com/zh/create/color-wheelhttp://www.colorhunter.com/http://www.bootcss.com/p/websafecolors/http://www.sioe.cn/yi…

2022年 27 个最佳 UX/UI 设计灵感网站

多亏了互联网,设计资源很容易获得。只需轻点几下,即可随时随地寻找灵感。在这篇文章中,我们展示了 25 个最好的 UX 和 UI 设计网站以获取灵感。 18 个最佳 UI 设计灵感网站 1.Behance Behance 是 UI 设计师最好的灵感设计网站之一。您可以…

2022年13个UX/UI/UE最佳创意灵感网站

作为一名设计师,最头疼的事莫过于缺少灵感或素材。每当我在对面新的创意需求时,求助一些顶级的资源或灵感网站,往往是最快获取思路的方法。 因此,我的收藏夹里总是填满了各类设计工具、插件、网站、资源,想着它们能使…

这10 个很“哇塞”的Web资源,前端必备的神仙级网站

毋庸置疑,善用工具可以加速开发,拉满开发效率,减少996的频率,提高我们的生活质量。 在此,为前端工友们分享10个我压箱底的Web资源,收藏≠学会,赶紧用起来吧! 1.Github &#xff0…

一个Behance被封,还有无数国内网站给我灵感

观前方星象,最近的设计圈并不太平,前有Figma封禁大疆设计团队账号,后有Behance封禁注册地在中国的个人设计账号。 说下Behance封号这事,真的可大可小。 2012年Behance被Adobe收购,正式进入国内视野,它快速…

拒绝灵感焦虑,藏在UI设计师书签里的宝藏网站!

都在说UI设计“越来越吃香”,导致其他门类的设计师一心想转行。 上次和入行8年的UI大佬聊天,她告诉小摹3条UI设计师必备能力: 审美能力和眼界:一个界面好不好看最后都是UI来定,为了不背锅,UI一定要有国际流…

用Meta标签代码让360双核浏览器默认极速模式打开网站不是兼容模式

我开发了一个网站,大量采用了html5和css3,希望用户都以webkit内核打开页面,但是测试却发现360的以ie内核打开为推荐模式,不知原因为何。其实360给网站开发者设计了一种选择的方法,只要加入一段Meta标签代码就可以解决。…

redis设计之网站访问量

题目:统计一个网站的每天的访问量,且每天自动更新统计数值 (1)表名:total_users (2)设计数据结构: Id:作为主键(唯一标识符) username:用户名 userpwd:登陆密码 age:年龄 tel:电话 QQ:QQ号 e-m…

5个GitHub项目+3个网站,助你一飞冲天!

小伙伴们周末好呀,这次来更新一波学习资源啦~ ????资源一览image-20210807235820378CyC2018 / CS-Notes高达 136K star 的项目! ???????? 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计概览图地址???? https://github.co…

记一次失败的菠菜网站渗透测试

来源:https://blog.csdn.net/weixin_44991517/article/details/1142684010x01 写在前面刚好最近有点时间,于是随便找了一个bc网站,就想着写篇文章顺一下渗透思路。0x02 信息收集目标站点为HK IP,无CDN,Windows服务器&a…

扩展ACL配置 禁止内网用户访问有毒网站

R1(config)# access-list 100 deny tcp 192.168.0.0 0.0.255.255 host 60.54.145.21 eq 80 R1(config)# access-list 100 permit ip any any R1(config)# interface e0 R1(config-if)# ip access-group 100 in

这30个高质量的数据集网站,你必须要试试!

点击上方“程序IT圈”,选择“星标”公众号超级无敌干货,第一时间送达!!!一、数据查询网站1、企业产生的用户数据百度指数:http://index.baidu.com/阿里指数:https://alizs.taobao.com/TBI 腾讯浏…

30个高质量的数据集网站,你必须要试试!

点击上方“Python人工智能编程”,选择“星标”公众号超级无敌干货,第一时间送达!!!一、数据查询网站1、企业产生的用户数据百度指数:http://index.baidu.com/阿里指数:https://alizs.taobao.com…

php网站实战,PHP实战之WEB网站常见受攻击方式及解决办法

一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种漏洞情况和防止攻击的办法跨站脚本攻击(XSS)跨站脚本攻击(XSS,Cross-site scripting)是最常见和基本的攻击WEB网站的方法。攻击者在网页上发布包含攻击性代码的数据。当浏览者看到此网…

程序员必须收藏的 58 个网站

来源:https://mp.weixin.qq.com/s/LBsw9KatMl6TQrjNt--a_A众所周知,程序员是一个需要不断学习的职业,而幸运的是,在这个互联网时代,知识就在那里,等着我们去获取。作为一个 收藏从未停止,学习从…

实战 | 把学校的网站搞了!

来自:知乎,作者:Ret2Rttrhttps://www.zhihu.com/people/bai-gei-a今天这篇文章来源于知乎上一个叫R1et2Rttr的分享,作者自称是一名六年级的小学生。文章主要记录的是他针对自己学校网站的一次渗透测试,过程非常有趣&am…