【问题标题】:Django Rest Framework invalid username/passwordDjango Rest Framework 用户名/密码无效
【发布时间】:2017-02-26 22:26:45
【问题描述】:

尝试执行一个简单的 'GET' 并返回管理员凭据

"detail": "用户名/密码无效。"

我有一个 自定义用户模型,我在其中删除了 用户名,改为使用 facebook_id

USERNAME_FIELD = 'facebook_id'

我尝试更改 DEFAULT_PERMISSION_CLASSES

('rest_framework.permissions.IsAuthenticated',), -- doesn't work!
('rest_framework.permissions.IsAdminUser',), -- doesn't work!

唯一有效的是:

('rest_framework.permissions.AllowAny',),

但我不希望这样,因为我正在为移动应用构建 API

我还声明了一个 CustomUserAdmin 模型和 CustomUserCreationForm ,显然这不是问题


帮我了解解决这个烦人的问题需要做些什么,我猜这可能与 Permissions/Authentication 或我 CustomUserModel..

的事实有关

另外,如果有更好的方法让移动应用客户端向 api 进行身份验证,请告诉我

【问题讨论】:

    标签: python django api django-rest-framework


    【解决方案1】:

    刚刚遇到同样的问题。在我的情况下,问题的根源是 Apache 的基本身份验证,我的浏览器正在发送 Authorization 标头,而 Django REST Framework 认为该标头将由它处理。解决方案非常简单:只需删除 'rest_framework.authentication.BasicAuthentication' 来自您的

    REST_FRAMEWORK = {
        "DEFAULT_AUTHENTICATION_CLASSES": [ 
            # ... auth classes here ... 
        ]
    }
    

    或显式设置默认的DEFAULT_AUTHENTICATION_CLASSES 以从DRF's defaults 中删除BasicAuth

    REST_FRAMEWORK = {
        "DEFAULT_AUTHENTICATION_CLASSES": (
            "rest_framework.authentication.SessionAuthentication",
        ),
    }
    

    【讨论】:

      【解决方案2】:

      你有默认值,然后你有每个视图。您可以将默认值设置为IsAuthenticated,然后覆盖视图的特定permission_classes。例如

      class ObtainJSONWebLogin(APIView):
          permission_classes = ()
      

      class Foo(viewsets.ModelViewSet):
          permission_classes = ()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-10
        • 2020-01-10
        • 2016-12-15
        • 2018-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-08
        相关资源
        最近更新 更多