前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >美多商城项目(三)

美多商城项目(三)

作者头像
小闫同学啊
发布2019-07-18 11:42:51
8750
发布2019-07-18 11:42:51
举报
文章被收录于专栏:小闫笔记小闫笔记

每日分享

代码语言:javascript
复制
The secret to happiness is freedom. And the secret to freedom is courage.

幸福的秘诀就是自由。 自由的秘诀就是勇气。

美多商城项目(三)

1.qq登录的详细流程(重点)

1.客户端请求获取QQ登录网址。

2.我们自己服务器返回QQ登录网址和参数给客户端。

3.客户端请求QQ登录网址。

4.QQ服务器最终返回QQ授权登录页面。

5.用户授权登录QQ。

6.QQ服务器响应时让客户端重定向访问callback回调网址,并携带code和state参数。

7.浏览访问callback回调网址。客户端还向我们自己的服务器发起一个页面请求,获取QQ登录用户openid并处理,传递code。

8.我们自己的服务器凭code请求QQ服务器获取access_token。

9.qq服务器返回access_token。

10.我们自己的服务器凭access_token请求访问QQ服务器获取openid。

11.QQ服务器返回openid。

12.我们的服务器根据openid判断是否绑定过本网站用户(查一下我们数据库中的表)。

13.如果绑定过,我们的服务器直接签发jwt token并返回给客户端。

14.如果未绑定过,我们自己的服务器将openid加密并返回给客户端。

15.客户端请求绑定QQ登录用户。

16.我们自己的服务器保存绑定的数据。

17.我们自己的服务器签发jwt token并返回给客户端。

2.QQ登录API

根据上述的流程我们进行分析,我们自己的服务器需要实现三个接口

2.1获取QQ登录网址

代码语言:javascript
复制
API: GET /oauth/qq/authorization/?next=<登录之后访问页面地址>
参数:
    通过查询字符串传递登录之后访问页面地址
响应:
    {
        "qq_login_url":"QQ登录网址"
    }

业务逻辑

a.获取next

b.组织QQ登录网址和参数

c.返回QQ登录的网址。

2.2获取QQ登录用户的openid并处理

代码语言:javascript
复制
API: GET /oauth/qq/user/?code=<code>
参数:
    通过查询字符串传递code
响应:
    1)如果openid已经绑定过网站用户,直接生产jwt token并返回
    {
        "user_id":"用户的id",
        "username":"用户名",
        "token":"jwt token"
    }
    2)如果openid还未绑定过网站用户,将openid加密并返回
    {
        "access_token":"加密的openid内容"
    }

业务逻辑

a.获取code并校验(code必须要传递)

b.获取QQ登录用户的openid

b.1通过code请求QQ服务器获取access_token

b.2通过access_token请求QQ服务器获取openid

c.根据openid判断是否绑定过本网站的用户

c.1如果已经绑定,直接生产jwt token并返回

c.2如果未绑定,将openid加密并返回

2.3保存QQ登录绑定数据

代码语言:javascript
复制
API: POST /oauth/qq/user/
参数:
    {
        "mobile":"手机号",
        "password":"密码",
        "sms_code":"短信验证码",
        "access_token":"加密openid"
    }
响应    
    {
        "id":"用户id",
        "username":"用户名",
        "token":"jwt token"
    }

业务逻辑

a.获取参数并进行校验(参数完整性,手机号格式,短信验证码是否正确access_token是否有效)

b.保存QQ绑定的数据

c.返回应答,绑定成功

3.urllib使用说明

在后端接口中,我们需要向QQ服务器发送请求,查询用户的QQ信息,Python提供了标准模块urllib可以帮助我们发送http请求。

  • urllib.parse.urlencode(query)将query字典转换为url路径中的查询字符串
  • urllib.parse.parse_qs(qs)将qs查询字符串格式数据转换为python的字典
  • urllib.request.urlopen(url, data=None)发送http请求,如果data为None,发送GET请求,如果data不为None,发送POST请求;返回response响应对象,可以通过read()读取响应体数据,需要注意读取出的响应体数据为bytes类型

4.使用itsdangerous生成凭据access_token

itsdangerous模块的参考资料连接http://itsdangerous.readthedocs.io/en/latest/

4.1 安装

代码语言:javascript
复制
pip install itsdangerous

4.2 TimedJSONWebSignatureSerializer的使用

使用TimedJSONWebSignatureSerializer可以生成带有有效期的token

代码语言:javascript
复制
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from django.conf import settings

# serializer = Serializer(秘钥, 有效期秒)
serializer = Serializer(settings.SECRET_KEY, 300)
# serializer.dumps(数据), 返回bytes类型
token = serializer.dumps({'mobile': '18512345678'})
token = token.decode()

# 检验token
# 验证失败,会抛出itsdangerous.BadData异常
serializer = Serializer(settings.SECRET_KEY, 300)
try:
    data = serializer.loads(token)
except BadData:
    return None

5.用户中心

5.1获取登录用户的基本信息

代码语言:javascript
复制
APPI: GET /user/
参数:
    通过请求头传递jwt token
响应:
    {
        "id":"用户ID",
        "username":"用户名",
        "mobile":"手机号",
        "email":"邮箱",
        "email_active":"邮箱验证"
    }

业务逻辑

a.设置只有经过认证的用户才可以进入

b.获取登录用户

c.将登录用户对象序列化并返回

5.2request.user

a.如果用户已经认证, request.user就是登录用户对象。

b.如果用户未认证, request.user就是一个匿名用户类的对象。

6.重点内容

1.自定义Django认证系统用户模型类

2.跨域请求

3.celery异步任务发短信

4.JWT认证机制

5.自定义jwt扩展登录视图响应数据函数

6.自定义Django认证后端类(登录账户支持用户名和手机号)

7.QQ登录开发流程(流程图,可以自己画一下)

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • 美多商城项目(三)
    • 1.qq登录的详细流程(重点)
      • 2.QQ登录API
        • 2.1获取QQ登录网址
        • 2.2获取QQ登录用户的openid并处理
        • 2.3保存QQ登录绑定数据
      • 3.urllib使用说明
        • 4.使用itsdangerous生成凭据access_token
          • 4.1 安装
          • 4.2 TimedJSONWebSignatureSerializer的使用
        • 5.用户中心
          • 5.1获取登录用户的基本信息
          • 5.2request.user
        • 6.重点内容
        相关产品与服务
        访问管理
        访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档