“WSGIRequest”对象没有属性“successful_authenticator”

2024-05-17

我已经创建了一个像这样的身份验证类:

RESTful API 的令牌身份验证:是否应该定期更改令牌? https://stackoverflow.com/questions/14567586/token-authentication-for-restful-api-should-the-token-be-periodically-changed

restapi/settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        # 'rest_framework.authentication.TokenAuthentication',
        'restapi.authentication.ExpiringTokenAuthentication',
    ),
    'PAGINATE_BY': 10
}

restapi/authentication.py

import datetime
from rest_framework.authentication import TokenAuthentication

class ExpiringTokenAuthentication(TokenAuthentication):
    def authenticate_credentials(self, key):
        try:
            token = self.model.objects.get(key=key)
        except self.model.DoesNotExist:
            raise exceptions.AuthenticationFailed('Invalid token')

        if not token.user.is_active:
            raise exceptions.AuthenticationFailed('User inactive or deleted')

        # This is required for the time comparison
        utc_now = datetime.utcnow()
        utc_now = utc_now.replace(tzinfo=pytz.utc)

        if token.created < utc_now - timedelta(hours=24):
            raise exceptions.AuthenticationFailed('Token has expired')

        return token.user, token

restapi/tests.py

def test_get_missions(self):
    """
    Tests that /missions/ returns with no error
    """
    response = self.client.get('/missions/', HTTP_AUTHORIZATION = self.auth)

在我的测试中,有一个例外AttributeError: 'WSGIRequest' object has no attribute 'successful_authenticator'

为什么我会出现这个错误?如何修复它?


问题来自于这一行:

utc_now = datetime.utcnow()

什么导致AttributeError: 'WSGIRequest' object has no attribute 'successful_authenticator'.

我已经有一段时间没有偶然发现这样一条误导性的错误消息了。

我是这样解决的:

restapi/authentication.py

import datetime
from django.utils.timezone import utc
from rest_framework.authentication import TokenAuthentication
from rest_framework import exceptions

class ExpiringTokenAuthentication(TokenAuthentication):
    def authenticate_credentials(self, key):
        try:
            token = self.model.objects.get(key=key)
        except self.model.DoesNotExist:
            raise exceptions.AuthenticationFailed('Invalid token')

        if not token.user.is_active:
            raise exceptions.AuthenticationFailed('User inactive or deleted')

        utc_now = datetime.datetime.utcnow().replace(tzinfo=utc)

        if token.created < utc_now - datetime.timedelta(hours=24):
            raise exceptions.AuthenticationFailed('Token has expired')

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

“WSGIRequest”对象没有属性“successful_authenticator” 的相关文章

随机推荐

  • 按两个字段分组,然后对 BigDecimal 求和

    我有一份税费清单 TaxLine title New York Tax rate 0 20 price 20 00 TaxLine title New York Tax rate 0 20 price 20 00 TaxLine title
  • 如何在 Firebase Analytics 事件中报告参数

    我用过Fabric with iOS在此之前 在同一分析事件中报告自定义参数非常容易 如下所示 Answers logCustomEvent withName saved border customAttributes image inde
  • 如何强制 Facebook 清除其缓存并使用共享网页的更新元描述?

    每当人们在 Facebook 上分享链接时 Facebook 就会从网页的 HTML 标头中获取标题和网页描述 我意识到 我相信是出于性能目的 如果更多的人一遍又一遍地共享相同的链接 Facebook 会缓存并重用网页标题和描述 如果网页上
  • 启用声纳 python 时 SonarQube 扫描仪执行期间出错

    我是一个非常新的 sonarqube 用户 正在尝试我的 python 项目 我已经安装了 docker Sonarqube 映像 其中安装了 Sonarpython 插件 我安装了 Linux 基础声纳扫描仪 Using these ht
  • 如何清除代码中的 NSLog 输出?

    有没有办法清除代码中的控制台输出 thanks 我喜欢的快捷方式 Simply USE K Keyboard Shortcut when you want to clear the NSLOG Data
  • 子序列和

    给定一个整数数组 例如 1 2 3 1 查找是否存在总和为0并返回它 例如 1 2 3 or 2 3 1 检查每个子序列是O n 2 这效率太低了 有改进的想法吗 创建一个新数组 其中每个元素等于前一个元素加上该元素的总和 Input 1
  • MVC 3 DropDownFor 和 ViewModel 不起作用

    我有 2 个型号 public class Person public Guid ID get set public string Name get set public class Event public Guid ID get set
  • 在powershell中,使用export-csv cmdlet,我的整数被引号封装,知道为什么吗?

    所以我运行一个sql查询 通过管道传输到export csv 唯一的问题是所有值都用引号封装 包括整数 这对我来说不可能作为整数重新导入到SQL中 有什么想法吗 CSV 没有类型的概念 它是纯粹基于字符串的格式 PowerShell 只引用
  • Android 上的 PlusOneButton 如何知道用户是否已点击?

    在我的 Android 应用程序中 我可以点击 Google 1 按钮 这与开发人员源材料中的以下代码配合得很好 https developers google com mobile android recommend https deve
  • 从 IOS 应用程序注销的完美方法是什么?

    下面的代码可以工作 但有一个错误 场景是 我首先登录进入应用程序系统 登录成功后 应用程序将设置 UserDefaults UserId 之后 我可以使用存储的 UserId 导航应用程序视图 一旦我进入设置和选项卡注销 这将清除 User
  • RegularExpressionValidator.ValidationExpression 强制长度为 10 或 12 个符号

    RegularExpressionValidator ValidationExpression d 10 仅表示数字 最多 10 位 RegularExpressionValidator ValidationExpression d 10
  • 我可以使用 jpeg 图像来启动 Screen

    我目前正在进行应用程序开发 并且添加了一个 JPEG 格式的启动器屏幕 该屏幕在模拟器和设备中都显示 但这是否会对苹果批准指南产生任何问题 iOS 8 更新 您现在可以使用基于 XIB 的启动资产 https developer apple
  • 什么是仅匹配空字符串的正则表达式?

    有很多关于正则表达式的帖子来匹配潜在地空字符串 但我找不到任何提供正则表达式的字符串only匹配一个空字符串 我知道 将匹配任何行的开头并且 将匹配任何行的结尾以及字符串的结尾 像这样 匹配的内容远不止空字符串 如 n foobar n n
  • Python 循环的列表理解

    我使用了很多 N 维数组 编写这样的缩进代码会很痛苦 而且我知道有些代码可以用列表理解和内联语句替换 例如 for x in 0 1 2 3 for y in 0 1 2 3 if x lt y print x y x y 可以替换为 pr
  • 如何重命名 MySQL 数据库(更改架构名称)?

    如何快速重命名 MySQL 数据库 更改其架构名称 通常我只是转储数据库并使用新名称重新导入它 对于非常大的数据库来说 这不是一个选项 显然RENAME DATABASE SCHEMA db name TO new db name 做了坏事
  • 安卓默认主题

    我正在制作一个 Android 应用程序 但我正在考虑主题 如果我不声明 Android 应用程序的主题 将使用哪个主题 我在哪里可以找到这些信息 使用其中之一和其他的标准是什么 我在想 如果我想自定义我的所有应用程序 我必须扩展一个主题并
  • 将列名称与具有 AJAX 数据源的 DataTable 一起使用

    我正在尝试升级我的系统以使用 DataTables 1 10 而不是 1 9 并且我正在尝试找到一种使用 JSON 对象而不是列表传回行内容的方法 具体来说 而不是以格式传回数据 data data data data data data
  • 如何修复 IE6 上的不透明度

    如何修复 IE6 上的不透明度 此代码不适用于 IE6 filter alpha opacity 50 moz opacity 0 5 khtml opacity 0 5 opacity 0 5 还有这段代码 description ani
  • ORA-00933 与内部联接和“as”混淆

    我有一个使用以下命令从两个表中获取数据的查询inner join 但我收到错误SQL command not properly ended as 下面有一个星号 select P carrier id O order id O aircra
  • “WSGIRequest”对象没有属性“successful_authenticator”

    我已经创建了一个像这样的身份验证类 RESTful API 的令牌身份验证 是否应该定期更改令牌 https stackoverflow com questions 14567586 token authentication for res