Django Rest Framework无效的用户名/密码

时间:2016-10-17 20:08:48

标签: python django api django-rest-framework

尝试做一个简单的' GET ' wih admin credentials返回

  

"详细信息":"用户名/密码无效。"

我有自定义用户模型,其中我删除了用户名,而是使用 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 ,显然这不是问题

帮助我了解解决这个令人讨厌的问题需要做些什么,我猜测它可能与权限/身份验证或我的CustomUserModel ..

另外,请告诉我移动应用客户端是否有更好的方式来验证api

2 个答案:

答案 0 :(得分:7)

遇到了同样的问题。在我的情况下,问题的根源是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",
    ),
}

答案 1 :(得分:0)

您有默认设置,然后您拥有每个视图。您可以将默认值设置为-(void)selectNextKeyView:(id)sender { // this is part of the keyboard handling. Cocoa swallows ctrl+Tab and // calls sselectNextKeyView, so we create a matchin key event for the occasion NSEvent *nsevent= [NSApp currentEvent]; [self handleKeyEvent:nsevent isRaw:FALSE isUp:FALSE]; } -(void)selectPreviousKeyView:(id)sender { // this is part of the keyboard handling. Cocoa swallows ctrl+shift+Tab and // calls selectPreviousKeyView, so we create a matchin key event for the occasion NSEvent *nsevent= [NSApp currentEvent]; [self handleKeyEvent:nsevent isRaw:FALSE isUp:FALSE]; } ,然后覆盖视图的特定IsAuthenticated。 e.g。

permission_classes

class ObtainJSONWebLogin(APIView):
    permission_classes = ()