如何在 Django Rest 框架中验证 API 请求(由匿名用户发起)?

2024-02-13

API 请求将由匿名用户发送。不存在登录/注册功能。

我需要对 API 请求进行身份验证,我尝试的一种原始方法是在每个请求中发送身份验证密钥。这个身份验证密钥 I 作为常量保存在 Angular 前端中。

一定有更好更复杂的方法,请帮忙!


Django REST 框架很大程度上假设请求是基于用户进行身份验证的,但它们确实提供了对身份验证匿名请求的支持。虽然这在很大程度上打破了“身份验证”意味着“验证(Django)用户是真实的”的假设,但 Django REST 框架确实允许这种情况发生,并且只是替换了AnonymousUser反而。

DRF 中的身份验证可以定义request.user(经过身份验证的用户)和request.auth(通常是使用的令牌,如果适用)请求的属性。因此,对于您的身份验证,您将保留您创建的令牌(在模型或其他地方),并且这些令牌将代替用户凭据进行验证,而您最终将不会设置用户。

from django.contrib.auth.models import AnonymousUser
from rest_framework import authentication
from rest_framework import exceptions

class ExampleAuthentication(authentication.BaseAuthentication):
    def authenticate(self, request):
        auth = authentication.get_authorization_header(request)

        if not auth or auth[0].lower() != b'token':
            return None

        if len(auth) == 1:
            msg = _('Invalid token header. No credentials provided.')
            raise exceptions.AuthenticationFailed(msg)
        elif len(auth) > 2:
            msg = _('Invalid token header. Credentials string should not contain spaces.')
            raise exceptions.AuthenticationFailed(msg)

        try:
            token = Token.objects.get(token=auth[1])
        except Token.DoesNotExist:
            raise exceptions.AuthenticationFailed('No such token')

        return (AnonymousUser(), token)

此示例假设您有一个Token存储将被验证的令牌的模型。令牌对象将被设置为request.auth如果请求已正确验证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Django Rest 框架中验证 API 请求(由匿名用户发起)? 的相关文章

  • Django Rest框架Json解析

    我想解析传入的POSTdjangoviews py 文件中的数据 发布数据 number 17386372 data banana apple grapes 这是我尝试读取上述传入数据的方法request views py class Fr
  • Python用Django请求Post请求数据

    我正在尝试向一个非常简单的 django 服务器发送一个简单的 post 请求 但无法理解为什么 post 数据没有出现在 requests post 字典中 而是出现在请求正文中 客户端代码 payload test test heade
  • IIS 和 ISAPI-WSGI = 非常慢

    我已经使用 IIS 在 IIS 上加载了 2 个 Django 应用程序isapi wsgi http code google com p isapi wsgi 这些都是服务器设置 Windows Server 2003 IIS6 和 SQ
  • Django:使用 Django ORM 实现 JOIN?

    我有一个用 Django 构建的问答类型的网站 具有以下模型 class Question models Model title models CharField max length 70 details models TextField
  • 预取相关之后选择相关

    我的模型看起来像 class Book models Model publisher models ForeignKey Publisher This is not important class Baz models Model a mo
  • 如何使用 Django 项目设置 SQLite?

    我已阅读 Django 文档 仅供参考 https docs djangoproject com en 1 3 intro tutorial01 https docs djangoproject com en 1 3 intro tutor
  • 如何添加身份验证中间件 JWT django?

    我正在尝试创建一个中间件来使用 JWT 进行身份验证 但在视图中 request user 始终是 AnonymUser 当我验证中间件通过用户模型更改 request user 时 确实如此 但在到达视图时 由于某种原因 request
  • 使用单选按钮渲染 ChoiceField

    我从模型构建了这个表格 class Configure template forms Form subject type forms ChoiceField choices Subject type objects all 我想使用单选按钮
  • Python 和 Django IDE 具有远程编辑功能吗?

    我正在寻找一个 IDE 它允许我编辑远程 Python 项目 并且还具有良好的 Django 支持 远程命令执行以及远程调试 我已经尝试使用 PyCharm 和 Aptana 与 PyDev 但我在配置它们进行远程编辑时运气不佳 感谢您的帮
  • 基于连接表的 Django 过滤器

    我有两张桌子 class Client models Model name models TextField lastname models TextField class Meta managed False db table clien
  • 让 Pytest 在 Django cookiecutter / Python 3.x 项目中运行

    我正在建造一个新的cookiecutter django https github com pydanny cookiecutter django项目 这里有本地设置说明 http cookiecutter django readthedo
  • 具有模型目录和AUTH_USER_MODEL

    I have myApp models profiles py代替myApp models py 对相关模型进行分组 你怎么设置AUTH USER MODEL在这种情况下 因为 auth 只接受 foo bar 模式 app label m
  • Django 模板 - 我可以设置要在父模板中使用的变量吗?

    我有一个包含通用导航菜单的父模板 我希望能够添加class selected 到适当的菜单选项 我希望能够在子模板中设置变量 例如 set menu products and do ifequal menu products class s
  • 将 Django +1.10 与 MongoDB 连接

    在过去的几个月里 有人为 MongoDB 更换了 Django 1 10 中的默认数据库引擎吗 我在谷歌上得到的所有信息都是六四年前的 最常见的结果包括mongodb 引擎这需要Django nonrel 来自 Django 1 5 的一个
  • django 中计数器的原子增量

    我正在尝试自动增加 Django 中的一个简单计数器 我的代码如下所示 from models import Counter from django db import transaction transaction commit on s
  • 在 Django 中使用 prefetch_lated 连接 ManyToMany 字段

    我可能遗漏了一些明显的东西 但我在连接 ManyToMany 字段以在 Django 应用程序中工作时遇到问题 我有两个模型 class Area models Model name CharField class Role models
  • Django“模型”对象不可迭代

    我有一张表 其中显示了已注册的员工 我想根据他们的数据库生成一个简单的 HTML 页面 其中包括他们的姓名 id 职称等 为此 我将一个 id 传递给视图 以便它可以获取相应用户的详细信息并向我显示 一切正常 直到出现错误对象不可迭代 下面
  • Python 中的单词匹配

    我有这个 但它正在进行部分匹配 for il in ignore list if il word in title or il word in text return True 我怎样才能只匹配整个单词 您需要将标题和文本字符串拆分为单词列
  • Django 评论和评级系统

    我正在寻找一个可以与我的 Django 网站顺利集成的博客和评论系统 我在网上发现了很多 但有点迷失了 我在这方面没有太多经验 希望大家能给我一些建议 以下是我想要拥有的东西 标签云 文章存档 按月 按年 文章评级 例如带有星星或自定义图标
  • on_delete=models.PROTECT 和 on_delete=models.CASCADE 在 Django 模型上有什么作用?

    我对 Django 很熟悉 但最近注意到有一个on delete models CASCADE and on delete models PROTECT模型的选项 on delete models CASCADE and on delete

随机推荐

  • 稀疏哈希表背后的主要实现思想是什么?

    为什么Google稀疏哈希开源库有两种实现 密集哈希表和稀疏哈希表 密集哈希表是普通教科书哈希表的实现 稀疏哈希表仅存储实际已设置的元素 并划分为多个数组 引用自comments http code google com p google
  • 枚举“继承”

    我在低级命名空间中有一个枚举 我想在中级命名空间中提供一个 继承 低级枚举的类或枚举 namespace low public enum base x y z namespace mid public enum consume low ba
  • 有 Spring WebSocketSession 存储库吗?

    我正在构建一个基于 Spring 4 2 的 WebSocket SockJS STOMP 服务器 并且我希望能够使用 ws sessionId 获取对 WebSocketSession 实例的引用 我可以通过添加一个 WebSocketH
  • 八度变量前面的 @ 符号的用途是什么?

    例如 model svmTrain X y C x1 x2 gaussianKernel x1 x2 sigma 免责声明 这是来自 Coursera ML 课程 但以传统方式搜索 符号几乎是不可能的 定义的前缀匿名函数 https www
  • Python导入vtk时DLL导入错误

    我需要使用VTK我在 Windows 10 机器上使用 python 编写了库 版本 5 10 因为我正在处理现有代码 但如果没有 我无法导入它DLLImport error Python 2 7 12 v2 7 12 d33e0cf915
  • 如何在Postman中查看重定向链?

    有时我需要测试多次重定向单个请求的网站 作为一个简单的例子 我用 PHP 创建了一个示例脚本
  • 在 R 中绘制自定义 PDF

    Given 考虑密度函数 phi 定义于 mathbb R for a in mathbb R and b in mathbb R star 这样 forall x in mathbb R phi x a b frac 1 sqrt 2 p
  • 如何在 Eclipse 中运行 Sencha Touch 应用程序

    我是 sencha touch 和手机间隙的新手 我想在 eclipse 中运行简单的 hello word 应用程序 但我不知道该怎么做 如果有人知道 请尽快告诉我 提前致谢 阿米尔汗一世 UPDATE 好吧 有一个可用于 eclipse
  • SQL 中二进制字符串的汉明距离

    我的数据库中有一个表 我将 SHA256 哈希值存储在 BINARY 32 列中 我正在寻找一种方法来计算列中条目与提供值的汉明距离 即类似 SELECT FROM table ORDER BY HAMMINGDISTANCE hash U
  • 有没有一个jQuery插件可以满足我对多表单验证的要求? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 它有电话 邮政编码 电子邮件的正则表达式检查 比较检查电子邮件和密码 奖励 屏蔽并强制仅使用字母和数字选
  • 在多个模拟器上进行connectedAndroid测试

    背景 我想在不同模拟器上的 Jenkins 上运行我的 Android Instrumented 测试 假设我有 100 个测试和 4 个模拟器 我想在每个模拟器上运行 25 个测试 我表演 gradlew connectedDebugAn
  • 如何选择子值数组包含某个属性的 json 对象

    我有一个类似于以下内容的对象数组 id one tags my key true id two 如何为包含 my key 为 true 的标签的每个对象选择所有 id 值 您可以使用select with tags my key true
  • 所有不重复的子数组元素的组合

    我有数据库中的 属性 每个属性都有许多值 现在我想混合这些值来创建独特的组合 输入示例 a array 35 gt array green red brown 36 gt array fox house dog 输出 第二维度元素的所有可能
  • Windows 窗体是旧技术吗?

    是时候为我的项目编写 GUI 了 我想知道该使用什么技术 我的大部分 NET GUI 开发都是在 NET 1 和 2 中完成的 所以我知道Windows 窗体 http en wikipedia org wiki Windows Forms
  • 在 setup.cfg 中查找出现问题 |路径中看不到模块

    我一直在尝试正确打包我的 python 代码 将其上传到 git 上 然后安装在虚拟环境中 所有这些我都做了并且似乎工作得很好 问题是 一旦我在虚拟环境上安装我的代码 当我运行我的包时 python3 m mypackage 它会引发一个错
  • .Net 属性的默认值属性

    我在用户控件中得到了这段代码 DefaultValue typeof Color Red public Color MyColor get set 我该如何改变MyColor为其默认值 The DefaultValueAttribute不会
  • 使用切片功能限制结果自动完成jquery ui

    我需要限制此自动完成 jquery ui 脚本中的结果 最多 10 个 我知道我必须使用切片函数 但我无法将其正确放置在脚本中 在此先感谢您的帮助 document ready function var myArr ajax type GE
  • 如何在 Linux 上查找 C 中未初始化的变量?

    我的 C 源代码有许多未初始化的变量 该代码运行在 RHEL 6 4 操作系统上 有没有办法找到所有未初始化的变量 Finding all从数学意义上来说 其中任何一个都是不可能的 至少没有误报 但是 有一些工具可以帮助找到其中一些 打开编
  • 多标签分类中的 Spacy TextCat 分数

    在spacy的文本分类中火车文本猫 https github com explosion spaCy blob master examples training train textcat py例如 指定了两个标签Positive and
  • 如何在 Django Rest 框架中验证 API 请求(由匿名用户发起)?

    API 请求将由匿名用户发送 不存在登录 注册功能 我需要对 API 请求进行身份验证 我尝试的一种原始方法是在每个请求中发送身份验证密钥 这个身份验证密钥 I 作为常量保存在 Angular 前端中 一定有更好更复杂的方法 请帮忙 Dja