django项目学习之QQ登录
最近在用django框架写一个商城项目(前后端分离),里面用到的一些技术其他项目也可以借鉴,于是就想写一些博客记录,以防自己忘记,今天先写一个关于登录接口中引入QQ登录接口的流程。
关于QQ登录接口的引入,在qq官方文档有详细说明,网址如下:
http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0
不过该文档中并没有python的,需要自己去造轮子,下面我就来记录一下流程。
首先讲一下准备工作,先去QQ提供的第三方接口网站申请一个appid和appkey,关于这两个数据,我没有深入研究,因为跟我的业务逻辑没什么关联,QQ官方对这两个数据描写如下:
appid:应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。
appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。
然后是具体流程部分:首先来讲一下大概的流程,
①你需要在登录界面放置一个QQ登录的接口,去请求QQ登录的界面,该接口的功能应该就是拼接一个QQ登录的url,然后通过GET方式去访问QQ登录的界面。
②访问到QQ的登录界面后,用户进行登录,登录完成后,则会跳转到回调地址,请求方式为GET,即你上面填写的redirect_uri,同时会带上两个参数,Authorization Code和status,这里的status就是你填写的status,Authorization Code是QQ服务器生成的一串字符,你可以通过该字符获得access_token(即登录时需要的token值)。获得到对应的token值后,会在对QQ服务器在进行请求,请求方式为GET,请求一个openid。
③根据openid来判断该QQ用户和我们网站的用户是否有关联,在返回相应的页面
首先来详细讲下第一步,这一步对应QQ官方的文档中的获取Access Token那一步中的第一步,查阅文档,访问的url为https://graph.qq.com/oauth2.0/authorize,当然这里我们需要一些必填参数,由于请求方式为GET,所以参数只能以查询字符串的形式发送,第一个参数是response_type,固定为code,格式为字符串,第二个参数是client_id,这个需要填写你申请的appid,第三个参数为redirect_uri,该参数需填写成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心。注意需要将url进行URLEncode。最后一个参数为state,该参数表示client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。在这里我们用来接收url中的next参数中的数据。访问成功,用户登录后,会跳转到回调链接,并带上code参数和status参数。
然后是第二步,这一步涉及两个参数的请求,首先是access_token,这一步对应QQ官方的文档中的获取Access Token那一步中的第二步,查阅文档,访问的url为https://graph.qq.com/oauth2.0/token,如上,这里也有一些必填参数,第一个参数为grant_type,默认为“authorization_code”,我们照填即可,第二个参数为client_id,同第一步,第三个参数为client_secret,这个需要填写你申请的appkey,第四个参数为code,即回调时传过来的code参数,最后一个参数为redirect_uri,同第一步。返回成功后,我们可以从返回的包中获取到相应的数据,从返回的数据中我们可以得到access_token的值
类似:access_token=FE04************************CCE2&expires_in=7776000&refresh_token=88E4************************BE14
获得到对应的token后,会在向QQ服务器请求一个openid,这一步对应QQ官方的文档中的获取openid的那一步,访问的url为https://graph.qq.com/oauth2.0/me,这一步只有一个必传参数access_token,即上一步请求得到的token值,返回成功后,会得到以下包数据
callback({"client_id":"YOUR_APPID", "openid":"YOUR_OPENID"})\n; 从该数据可以得到我们需要的openid,根据对应的openid来返回对应的页面。
django项目学习之QQ登录的更多相关文章
- Django项目中使用qq第三方登录。
使用qq登录的前提是已经在qq互联官网创建网站应用并获取到QQ互联中网站应用的APP ID和APP KEY 1,建路由 # qq登录 path('loginQq/',qq.loginQq,name=' ...
- 我用Django搭网站(2)-QQ登录
接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权. 第一步:准备阶段 打开QQ互联,并登录你的QQ账号.再点击导航上的" ...
- django项目实现第三方github登录
OAuth(开放授权 Open Authorization)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容 ...
- django项目中使用手机号登录
本文使用聚合数据的短信接口,需要先获取到申请接口的appkey和模板id 项目目录下创建ubtils文件夹,定义返回随机验证码和调取短信接口的函数 function.py文件 import rando ...
- django项目学习之异步框架celery
最近用django一个网上商城项目的时候用两个扩展,感觉还不错,所以在此记录一下. 首先来说下celery,celery是一个处理异步任务的框架,需要下载celery包,一般在项目需要进行耗时操作的时 ...
- Django项目中集成第三方登录时出现的错误
原以为是被反爬 没想到 总结:这里的http应该是https协议,以后要更加小心 了,不能犯这种低级错误
- QQ登录的那些坑
这几天在项目上面实现qq登录的功能,当功能做好后发现,同一个qq号登录之后腾讯返回的openid并不一样....(天啦噜啊~)然后查询文档以及咨询客服才知道注册申请时是有一个固定的套路的(不得不说,如 ...
- QQ登录, 腾讯开放平台和QQ互联的坑
原文:QQ登录, 腾讯开放平台和QQ互联的坑 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012881042/article/details/7 ...
- Django商城项目笔记No.12用户部分-QQ登录2获取QQ用户openid
Django商城项目笔记No.12用户部分-QQ登录2获取QQ用户openid 上一步获取QQ登录网址之后,测试登录之后本该跳转到这个界面 但是报错了: 新建oauth_callback.html & ...
随机推荐
- postman-变量
Variables 什么是变量 变量是一个符号,可以接受不同的值.你可能根据你的项目经验,对其他语言的变量比较熟悉.在postman 的工作原理也是一样的 为什么使用变量 变量允许你在不同的地方重复使 ...
- Comet OJ - Contest #8 E.神奇函数
旧题解:https://blog.csdn.net/gmh77/article/details/99066792#commentBox 之前写的有些奇怪,不能体现这道题的sb所以再推一遍 \(\bec ...
- js 复杂研究
function test_001() { var t =0; return t || out_str("t未定义"), //1 // 执行1句;在执行2句; t||null // ...
- CSS 处理溢出强行换行
CSS折行样式 word-break:break-all;允许单词拆分折行 word-break:keep-all;只能在半角空格或连字符处换行. word-wrap:break-word;在长单词或 ...
- centos-系统删除多余网卡的方法
一.删除系统中中多余的ifcfg-eth0.bak Centos系统更改网卡或网卡MAC地址后会出现个eth0.bak配置备份文件解决方法:/etc/sysconfig/networking/devi ...
- 函数式接口和Lambda表达式
函数式接口(一般标有@FunctionalInterface)就是只定义一个抽象方法的接口. 一个接口,如果满足函数式接口的定义,那么即使不标注为 @FunctionalInterface, 编译器依 ...
- PHP通用后台管理系统发布!
下载地址:https://gitee.com/lim2018/phpadmin
- python正则之模式re.I re.M
re.I 忽略大小写 >>> re.match(r"A","abc",re.I) <_sre.SRE_Match object at 0 ...
- htonl(),htons(),ntohl(),ntons()--大小端模式转换函数
不同机器内部对变量的字节存储顺序不同,有的采用大端模式(big-endian),有的采用小端模式(little-endian). 大端模式是指高字节数据存放在低地址处,低字节数据放在高地址处. 小端模 ...
- JavaScript 事件不触发
在class上绑定的事件,点击图片的时候无法触发 <div id="files" class="files"> <div> <p& ...