Django 项目总结(3)- 第三方登录(QQ登录)

第三方登录(QQ 登录)

根据 qq 开发文档 oauth2.0

QQ 登录流程:

  1. 前端页面点击 QQ 登录,需要跳转到 QQ 的登录页面,但是前端不知道 QQ 的登录链接,所以先想后端发送请求,由服务器生成 QQ 登录页地址,返回给前端;
  2. 用户在 QQ 登录页进行登录,QQ 将用户重定向到服务器的 callback 网站(当时给定的回调地址),并携带授权 code;
  3. 访问 callback?code=xx 网址,请求发到后端;
  4. 自己的服务器凭借 code 向 QQ 服务器请求 access_token,返回 access_token 后,凭借 access_token 向 QQ 服务器请求 open_id,open_id 是当前登录的 QQ 用户在 QQ 服务器的唯一身份标识;
  5. 服务器拿到 open_id 之后,判断当前 open_id 是否绑定过;
  6. 如果没有绑定过,说明是第一次进来,返回一个 access_token,用于绑定操作,前端收到用于绑定的 access_token 就会跳转到绑定页面,用户填写数据,携带手机号、密码、短信验证码、access_token 请求绑定 QQ 用户身份,如果服务器中存在用户数据,判断密码是否正确,进行绑定,如果不存在,创建用户并绑定身份,最后再返回登录成功的 JWT token;
  7. 如果绑定过,说明用户不是第一次 QQ 登录,直接返回登录的 JWT token,不会再跳转到绑定界面。



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类型

猜你喜欢

转载自blog.csdn.net/qyf__123/article/details/84403601