-
用户部分-用户登录(API接口设计&jwt扩展登录视图使用)
API接口设计: POST /authorizations/ 参数: { "username": "用户名", "password": "密码" } 响应: { "user_id": "用户id", "username": "用户名", "token": "jwt token" } jwt 扩展登录视图: from rest_framework_jwt.views import obtain_jwt_token obtain_jwt_token:接收username和password并进行校验,如果正确,会生成一个jwt token并返回
-
用户部分-用户登录(自定义jwt扩展登录视图响应数据函数)
1)自定义登录视图响应数据函数 def jwt_response_payload_handler(token, user=None, request=None): """ 自定义jwt认证成功返回数据 """ return { 'token': token, 'user_id': user.id, 'username': user.username } 2)修改jwt扩展配置项 # JWT扩展配置 JWT_AUTH = { # ...... 'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler', }
-
用户部分-用户登录(前端vue逻辑)
-
用户部分-用户登录(登录账户支持用户名和手机号)
多账户登录:登录账户支持用户名和手机号。 -> post /authorizations/ -> obtain_jwt_token: 此视图内部没有自己实现账户名和密码校验的过程,而是调用Django认证系统的authenticate来进行账户名和密码的检验 -> from django.contrib.auth import authenticate:此方法内部也没有自己实现账户名和密码校验的过程,而是调用Django认证系统后端类ModelBackend中authenticate进行了账户和密码的检验 from django.contrib.auth.backends import ModelBackend ModelBackend中的authenticate进行账户和密码校验时,账户名只支持用户名。 步骤: 1)自定义Django的认证后端类,继承于ModelBackend,重写authenticate方法,让账户既可以是用户名,也可以手机号 2)修改Django的认证后端类 AUTHENTICATION_BACKENDS = ['自定义认证后端类']
-
用户部分-QQ登录(QQ登录效果演示&开发预备工作)
QQ登录: 当用户使用QQ登录时,会判断QQ用户和网站本身用户是否绑定过,如果已经绑定过,会直接让对应的用户登录成功,否则会让用户先进行绑定操作,绑定之后才能登录成功。 开发预备工作: 1)注册成为QQ开发者 2)登录开发者账户,创建开发者应用,提供信息并等待审核 3)审核通过,获取appid和appkey,然后就可以进行QQ相关功能开发。
-
用户部分-QQ登录(QQ登录关键点说明&模型类定义&工具类集成)
QQ登录关键点: 获取QQ登录用户openid(`唯一身份标识`),然后判断openid和网站本身的用户是否进行了绑定,如果绑定过,直接让用户登录成功;如果未绑定,先让用户进行绑定,把绑定的数据存下来,然后让用户登录成功。
id openid user_id 1 DKKDKKDS1288dKKDkdkdkE 2 -
用户部分-QQ登录(基础知识-urllib模块和itsdangerous模块的使用)
itsdangerous: 数据的签名加密和解密。
-
用户部分-QQ登录(QQ登录开发流程图和API接口分析)
1)获取QQ登录用户的网址 2)获取QQ登录用户的openid并处理 3)保存QQ登录的绑定数据
-
用户部分-QQ登录(Step1-获取QQ登录网址-API接口设计与实现)
API接口设计: GET /oauth/qq/authorization/?next=<登录之后访问页面地址> 参数: 通过查询字符串传递<登录之后访问页面地址> 响应: { "login_url": "<QQ登录网址>" }
-
用户部分-QQ登录(Step1-前端vue逻辑)
点击`QQ登录`,访问后端`获取QQ登录网址`API接口,然后前端访问`QQ登录网址`,最终显示`QQ授权登录`页面。
-
用户部分-QQ登录(Step2-获取QQ登录用户openid并处理-API接口设计与实现)
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内容" }
‘ED8D5BA99D9DED64EF305E1CFA9227DD’
-
用户部分-QQ登录(Step2-前端vue逻辑)
-
用户部分-QQ登录(Step3-保存QQ登录绑定数据-API接口设计与实现)
-
用户部分-QQ登录(Step3-前端vue逻辑)
今日内容
1)登录API
登录API接口设计->
jwt扩展登录视图:obtain_jwt_token->
响应数据只有token->
自定义jwt 扩展登录视图响应数据函数
2)多账户登录
需求:登录账户支持用户名和手机号
步骤:
a)自定义Django的认证后端类,继承于ModelBackend,重写authenticate方法,让账户既可以是用户名,也可以手机号
b)修改Django的认证后端类 AUTHENTICATION_BACKENDS = [‘自定义认证后端类’]
3)QQ登录
QQ登录效果->QQ开发预备工作->QQ开发关键点(openid)->QQ绑定数据表->集成QQ开发工具类&配置->urllib和itsdangerous->QQ登录开发流程和API接口分析:
a)获取QQ登录网址
b)获取QQ登录用户openid并处理
c)绑定QQ登录绑定数据