7

如果我的网络服务(由 Django Rest Framework,v2.3.8 提供支持)位于受 Nginx 的 HTTP 基本身份验证保护的位置,如下所示:

location / {
            auth_basic           "Restricted access";
            auth_basic_user_file /path/to/htpasswd;

            uwsgi_pass django;
            include /etc/uwsgi/config/uwsgi_params;
    }

然后,当用户进行身份验证并尝试访问 API 时,所有视图都会获得以下响应:

{"detail": "Invalid username/password"}

即使视图不需要身份验证,Django Rest Framework 是否会获取 HTTP 授权标头(用于 Nginx)?如果是这样,我该怎么做?

任何帮助将不胜感激。

4

2 回答 2

8

默认情况下,Django Rest Framework 有两个身份验证类,请参见此处

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

如果不需要,可以禁用其余框架身份验证。

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': ()
}

或者您只能删除BasicAuthentication,因为它适用于您的情况。

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication'
)}
于 2013-12-18T16:19:11.060 回答
2

如另一篇文章所述,您必须在身份验证类旁边添加一个逗号,否则它会引发 TypeError。

'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication', #comma added here
)

来源:https ://stackoverflow.com/a/22697034/5687330

于 2016-11-02T14:32:05.533 回答