尝试做一个简单的' 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
答案 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 = ()