2013-10-30 35 views
3

如果我的web服務(搭載Django的REST框架,v2.3.8)是Nginx的的HTTP基本認證保護的,像這樣的位置內:背後HTTP基本驗證Django的REST框架

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框架拿起HTTP授權頭(專供Nginx的),即使該視圖不要求身份驗證?如果是這樣,我應該怎麼做呢?

任何幫助將不勝感激。

回答

5

默認情況下,Django Rest Framework有兩個驗證類,請參閱here

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' 
)} 
+0

出於安全原因,不禁止的默認安全設置 – panchicore

+0

這個答案的作品。當您需要安全性時,您可以調整應用程序的安全性。 –

+0

你救了我的一天!謝謝。 – purrogrammer

0

正如在另一篇文章中指出的,您必須在身份驗證類旁邊添加一個逗號,否則它可能會引發TypeError。

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

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