【问题标题】:Django rest API Authentication [closed]Django rest API 身份验证 [关闭]
【发布时间】:2020-08-03 15:37:55
【问题描述】:

我使用 Django REST 框架创建了一个 REST API 来保存“联系我”表单的详细信息,其中包含 UI 中的姓名、手机号码、电子邮件和消息。 如果我的网站没有用户名和密码,我应该如何验证我的 API 以保存详细信息?

感谢您的帮助!!!

谢谢, 文卡特。

【问题讨论】:

    标签: python django django-models django-rest-framework


    【解决方案1】:

    如果您想允许与特定视图的任何连接,您可以将permission.AllowAny 添加到permission_classes 属性。

    from rest_framework import permissions
    class YourView(APIView):
        permission_classes = [permission.AllowAny]

    或者您可以在settings.py中默认为您的所有项目提供它:

    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': []
    }

    如果未指定,此设置默认允许无限制访问:

    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ]
    

    更多信息可以在official doc找到

    【讨论】:

    • 这会让我的 API 容易受到攻击,对吧?有没有其他方法可以仅对来自特定域的调用进行身份验证?例如,如果有人多次点击 Postman 的服务,这会将数据保存到我的生产服务器中,有没有办法消除这种情况?
    • 是的,您可以使用一个名为 django-cors-headers 的包来控制项目的 cors
    • 我添加了 django-cors-headers,但我仍然能够从 POSTMAN 触发服务。有什么我需要做的吗?除了添加cors,还有没有其他方法可以控制恶意攻击?
    • 好吧,我不知道目的,但你为什么不使用令牌来验证和控制谁访问你的 API?
    • 在我们的例子中,我没有令牌,因为用户没有在我们这里注册。该域名可供互联网上的所有人使用,他们应该能够填写一些基本详细信息,然后单击“联系我”按钮,这应该会触发我们的 API 并将详细信息保存到数据库中,呼叫中心团队将联系此人。
    【解决方案2】:

    您可以删除身份验证权限

    settings.py: 
    REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': [],
    }
    

    【讨论】:

    • 这会使我的 API 容易受到攻击,对吧?有没有其他方法可以仅验证来自特定域的调用?例如,如果有人多次点击 Postman 的服务,这会将数据保存到我的生产服务器中,有没有办法消除这种情况?
    猜你喜欢
    • 2018-07-04
    • 2021-12-24
    • 2012-03-17
    • 2017-12-15
    • 2019-03-31
    • 2018-07-26
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多