Adm*_*les 9 python api django django-rest-framework
尝试执行简单的“ GET ”,并返回管理员凭据
"detail": "无效的用户名/密码。"
我有一个自定义用户模型,我在其中删除了username,而是使用facebook_id:
USERNAME_FIELD = 'facebook_id'
Run Code Online (Sandbox Code Playgroud)
我尝试更改DEFAULT_PERMISSION_CLASSES:
('rest_framework.permissions.IsAuthenticated',), -- doesn't work!
('rest_framework.permissions.IsAdminUser',), -- doesn't work!
Run Code Online (Sandbox Code Playgroud)
唯一有效的是:
('rest_framework.permissions.AllowAny',),
Run Code Online (Sandbox Code Playgroud)
但我不希望那样,因为我正在为移动应用程序构建 API
我还声明了一个CustomUserAdmin模型和CustomUserCreationForm,显然这不是问题
帮助我了解需要做什么来解决这个烦人的问题,我猜这可能与权限/身份验证或我 CustomUserModel..
另外,让我知道是否有更好的方法让移动应用程序客户端对 api 进行身份验证
小智 7
刚刚有同样的问题。就我而言,问题的根源是 Apache 的基本身份验证,我的浏览器正在发送Authorization标头,而 Django REST Framework 认为该标头将由它处理。解决方案非常简单:只需
'rest_framework.authentication.BasicAuthentication'从您的
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": [
# ... auth classes here ...
]
}
Run Code Online (Sandbox Code Playgroud)
或者明确设置默认值DEFAULT_AUTHENTICATION_CLASSES以BasicAuth从DRF 的 defaults 中删除。
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework.authentication.SessionAuthentication",
),
}
Run Code Online (Sandbox Code Playgroud)
您有默认值,然后您有每个视图。您可以将默认值设置为IsAuthenticated,然后覆盖视图的特定permission_classes. 例如
class ObtainJSONWebLogin(APIView):
permission_classes = ()
Run Code Online (Sandbox Code Playgroud)
或者
class Foo(viewsets.ModelViewSet):
permission_classes = ()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3421 次 |
| 最近记录: |