- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试设置 AWS Cognito 后端我已经有一个 React 前端在使用它,现在我需要我的 DRF API 使用 Cognito 作为后端进行身份验证。
我为此找到了一些 Python 包,但似乎没有一个得到积极维护 django-warrant不适用于 Django3 并且几乎已经死了
Django Cognito JWT似乎是我最好的选择但也没有积极维护,文档很差,有一个medium post关于如何使用,不是很详细,但聊胜于无。
所以,我尝试遵循文档
在我的设置中添加了环境变量
COGNITO_AWS_REGION = 'us-east-1'
COGNITO_USER_POOL = 'us-east-1_xxxxxxx' # same user pool id I'm using on the React app
COGNITO_AUDIENCE = 'XXXXXXXXXXXXXXXXXXXXXX' # the same client id I'm using on the React app
然后在我的 DRF 身份验证类上:
'DEFAULT_AUTHENTICATION_CLASSES': [
'django_cognito_jwt.JSONWebTokenAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
最后是用户模型:
AUTH_USER_MODEL = 'accounts.MyUser'
COGNITO_USER_MODEL = "accounts.MyUser"
我的自定义用户模型:
class MyUser(AbstractUser):
"""User model."""
username = None
email = models.EmailField(_('email address'), unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
我也在使用 DRF JWT 包,如果我尝试使用 Cognito 用户登录,类似于:
curl -X POST -H "Content-Type: application/json"-d '{"email":"user@invalid.com","password":"secretpassword"}' http://本地主机/api-token-auth/
我收到错误
{"non_field_errors":["无法使用提供的凭据登录。"]}
另一方面,如果我尝试通过 Django Rest Framework JWT 使用本地 Django 用户登录,它工作正常,并且我得到 JWT token 作为响应,所以我猜问题出在 Cognito 集成上。
知道我错过了什么吗?或者我如何调试才能弄清楚发生了什么?
更新
深入研究代码后,我发现了一些事情:
即使进行 DRF JWT 身份验证,代码最终也会出现:django/contrib/auth/init.py它循环遍历 Django 的所有身份验证后端,而不是 DRF:
for backend, backend_path in _get_backends(return_tuples=True):
仍然使用ModelBackend
来验证用户身份。
所以,我想我还需要为 Django 添加一些 Cognito 身份验证后端。我检查了是否可以使用 DRF 上使用的相同后端,但随后出现参数无效的错误:类型错误:authenticate() 收到意外的关键字参数“email”
更新 2问题之一似乎是因为我使用电子邮件而不是用户名进行身份验证,并且没有一个软件包似乎支持它
最佳答案
基本上,有两个步骤可以实现您的目标。
Authorization Bearer IdToken
中的IdToken通过curl
调用API。与 rest_framework_jwt
不同,django_cognito_jwt
仅处理 header 中的 JWT token 。 django_cognito_jwt
不涵盖第 1 步。这就是您收到此错误的原因 TypeError:authenticate() got an Unexpected keywords argument 'email'
。
因此,解决方案是使用 boto3 获取 IdToken
并通过传递 Authorization:Bearer IdToken
header 应用 curl
。
关于python - AWS Cognito for Django3 + DRF 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60309604/
背景 我有一个定义了多个自定义操作的 ModelViewSet。我在 urls.py 中使用默认路由器注册 URL。现在,我的 View 使用默认创建的路由,如 ^images/$ , ^images
DRF 中的 request.data 和 DRF 中的 serializers.data 有什么区别。 当我在 DRF 中编写基于函数的 View 时,我会像使用它们一样 - eli
我用Django REST框架准备了API。我正在使用docker运行我的API,一切在我的机器上都运行得很好。因此,我只需运行docker-compose up,就可以在浏览器中使用Swagger测
我用Django REST框架准备了API。我正在使用docker运行我的API,一切在我的机器上都运行得很好。因此,我只需运行docker-compose up,就可以在浏览器中使用Swagger测
1. 源码分析 注意:以下代码片段为方便理解已进行简化,只保留了与序列化功能相关的代码 序列化的源码中涉及到了元类的概念,我在这里简单说明一下:元类(metaclass)是一个高级概念,用于定义类
1. 解析器源码分析 注意:以下源码为了方便理解已进行简化,只保留了解析器相关的代码 # 视图函数: class MyView(APIView): def post(self, reque
快速上手JWT签发token和认证,有这一篇就够了,DRF自带的和自定义的都帮你总结好了,拿去用~ DRF JWT认证(二) 上篇中对JWT有了基本的认知,这篇来略谈JWT的使用 签发:一般我们登录成
什么接口文档都不用手写了?自动挡? DRF 自动生成接口文档 我们知道前后端分离,前端一般按后端写好的接口去开发,那么就需要我们明细后端接口数据等,需要写接口文档,前端按照接口文档去开发 接口文档如何
为什么要使用JWT认证?构成和原理又是什么?怎么还有Base64的事?我都写了👆 DRF JWT认证(一) JWT认证 Json web token (JWT), 是为了在网络应用环境间传递声明而执
DRF 中如何使用过滤,排序,分页,以及报错了如何处理?10分钟get了~ DRF 过滤排序分页异常处理 过滤 涉及到查询数据的接口才需要过滤功能 DRF过滤使用种类: 内置过滤类 第三方 自定义 内
前后端分离开发怎么给接口做认证权限频率三大认证?点进来5分钟get! DRF-认证权限频率 前后端混合开发,可以通过HttpResponse对象来设置cookie进而校验登录,现在前后端分离开发,用不
你问我使用DRF视图组件快速写接口?九九归一剑诀早就准备好了,没有副作用! DRF 视图组件 DRF框架提供了很多通用的视图基类与扩展类,上篇使用的APIView是比较偏Base的,视图的使用更加简化
1、路由Routers 在 Rest Framework 中提供了两个 router , 可以帮助我们快速的实现路由的自动生成。 必须是继承 ModelViewSet 的视图类才能自动生成路由
1. 前言 大家好,我是安果! 接下来,将通过几篇文章将对 DRF 模型序列化进行展开说明,详情谈谈模型序列化的作用、步骤及进阶用法 2. 模型序列化的作用?  
我第一次尝试进入 Django 原子事务。我想知道是否有可能像这样使用它: class TaskViewSet(MultiSerializerViewSet): @transaction.at
我有一个 drf 序列化程序,其中有一个我想重命名的字段: class UserBulkUploadSerializer(serializers.Serializer): ... is
我使用了 drf 并且还使用了 serializer 来检查用户输入。 这是我的serializer.py class BoardSerializer(serializers.Serializer):
我正在尝试序列化一个 CreateUserSerializer(ModelSerializer)我的代码如下。我的问题是它只会创建一个 User 而不是 UserProfile。 模型.py clas
我如何发布这个 JSON { "campaign": 27, "campaignName": "Prueba promo", "promotionType": 999, "items"
我正在构建一个 todo 应用程序,可以在 todo 上发布评论。 为此,我制作了一个可写的双嵌套序列化程序。它有效,但我编写的更新方法难以理解,因此我试图使其更具可读性。是否有更好的(或标准的)方法
我是一名优秀的程序员,十分优秀!