最近在用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来返回对应的页面。

转载于:https://www.cnblogs.com/HZHST/p/11287463.html

django项目学习之QQ登录相关推荐

  1. Django项目实战——6—(退出登录、判断用户是否登录、QQ登录、QQ登录工具QQLoginTool、本机绑定域名)

    1.退出登录 注册界面跳转到登陆界面:templates/register.html 前端注册界面 {# 跳转到登陆界面 #}<a href="{% url 'users:login' ...

  2. Django项目实战——5—(用户登录、首页用户名展示、项目阶段总结)

    1.用户登录 用户名登录逻辑分析 用户名登录接口设计 请求方式 请求参数:表单 响应结果:HTML 用户名登录逻辑实现 用户后端验证视图文件apps/users/views.py "&quo ...

  3. django项目学习

    socket编程 scocket 协议位于服务端和客户端之间,b/s架构之间的通信步骤如下图所示.我们web开发做的就是socket服务端的时,通过客户端发来的数据,返回给客户端想要的数据. 简单使用 ...

  4. django项目实现第三方github登录

    OAuth(开放授权 Open Authorization)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容 ...

  5. Django项目中使用第三方登录——支付宝登录

    1. 首先在支付宝开放平台(https://open.alipay.com/platform/home.htm)扫码注册信息 选择开发者中心选择研发服务 配置沙盒应用密钥 使用密钥生成工具生成公钥与私 ...

  6. springboot项目功能之qq登录的实现

    思路 主要就是引入的了qq互联的api 要想调用qq登录的api首先要2个条件 有阿里云服务器 要申请一个域名,并且备案 有了这两个就可以在qq互联申请一个网站,会得到一个回调方法,然后qqAppId ...

  7. Django项目实践(商城):九、QQ登录

    (根据居然老师直播课内容整理) QQ登录:即我们所说的第三方登录,是指用户可以不在本项目中输入密码,而直接通过第三方的验证,成功登录本项目. 一般QQ登录成功就直接进入系统,本项目还需要绑定用户 如果 ...

  8. Django项目实现微博登录

    Django项目实现微博授权登录 前言 前段时间我的老板让我写一个小功能,说现在的用户进入一个新的网站时,很多时候是不想去注册的,最好可以用一些他们本身就用的其他应用的账户来授权登录.本文就是从这个现 ...

  9. QQ登录的那些坑(如何开发qq登陆功能)

    这几天在项目上面实现qq登录的功能,当功能做好后发现,同一个qq号登录之后腾讯返回的openid并不一样....(天啦噜啊~)然后查询文档以及咨询客服才知道注册申请时是有一个固定的套路的(不得不说,如 ...

最新文章

  1. (转)Properties Editor为你解除通过native2ascii进行Unicode转码的烦恼
  2. Problem 2238 Daxia Wzc's problem 1627 瞬间移动
  3. Android启动Activity的两种方式与四种启动模式
  4. 先定个小目标, 使用C# 开发的千万级应用
  5. sys.stdin.read和raw_input函数
  6. JavaScript调用WebServices
  7. 数据结构实验之查找二:平衡二叉树
  8. 人寿保险分红型的十年能取出来吗?
  9. vim php 配置文件,spacevimsetting
  10. Mac下生成多个SSH KEY并管理
  11. 等级保护三级备案材料有哪些
  12. roseha 8.9 for linux oracle 11g,RoseHA 9.0 for Linux配合Oracle12c配置文档_v2.0-2015-04.pdf
  13. ubuntu16.04系统下配置caffe的GPU环境,训练mobileNet-SSD并在EAIDK-310嵌入式上推理
  14. scikit 线性回归_使用scikit学习线性回归学习和体育运动nba数据数据科学
  15. 上帝模式下的shellcode
  16. 第三方android 模拟器哪个好用吗,安卓模拟器哪个好 哪个电脑安卓模拟器好用...
  17. iterm2 官方使用说明翻译
  18. 银川:“贺兰晴雪”宁静悠然
  19. 设计模式之 State(状态模式)通俗理解
  20. 微服务_服务网关(Gateway)

热门文章

  1. linux mmu的实现的讲解_Linux中的物理内存管理 [一]
  2. windows cmd 窗口 显示信息慢_你玩过Windows 10新版CMD了吗?
  3. json从立地到成佛
  4. DButils的更新与查询,利用C3P0链接数据库
  5. Java-Web Response响应和Request请求
  6. iOS - 利用 UIBezierPath 绘制圆弧
  7. P1464 Function(递归式的记忆化搜索)
  8. 二叉树的前序、中序和后序遍历介绍及案例
  9. html5的网页布局工具,HTML5网站响应式布局的主流设计方法介绍及工具推荐
  10. oracle分库分表原理_02. MyCat 的原理,应用场景,分库分表的思想