2013-07-15 7 views
6

Я не могу выйти из текущего пользователя из режима браузера в остальном api.Выход не работает

Это мои настройки

REST_FRAMEWORK = { 
       'PAGINATE_BY': 10, 
       'DEFAULT_AUTHENTICATION_CLASSES': ( 
         'rest_framework.authentication.BasicAuthentication', 
         'rest_framework.authentication.SessionAuthentication', 
         'rest_framework.authentication.TokenAuthentication', 
               ), 
        'DEFAULT_PERMISSION_CLASSES': ( 
         'rest_framework.permissions.IsAuthenticated', 
            ), 
       } 

Является ли это потому, что я использовал сессию? Помощь Pls.

запрос и ответ заголовки:

Request URL:`http://localhost:8000/api/api-auth/logout/?next=/api/city/` 
Request Method:GET 
Status Code:302 FOUND 
Request Headers: 
--------------- 
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Cookie:sessionid=j7qebcdjdwzwqlmep4eyq3svuial43uv; csrftoken=vK3Ghn3QFVbCe3nKx1LDZBTzM7sRiDym 
Host:127.0.0.1:8000 
Referer:`http://localhost:8000/api/city/` 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36 
Query String Parametersview sourceview URL encoded 
next:/api/city/ 
Response Headers 
---------------- 
Content-Type:text/html; charset=utf-8 
Date:Mon, 15 Jul 2013 20:46:35 GMT 
Location:`http://localhost:8000/api/city/` 
Server:WSGIServer/0.1 Python/2.7.4 
Set-Cookie:sessionid=b1x24z93dqu384lqirtv5r9npy16s0qx; expires=Mon, 29-Jul-2013 20:46:35 GMT; httponly; Max-Age=1209600; Path=/ 
Vary:Cookie 

ответ

12

решаемые It! Это связано с тем, что включена функция BasicAuthentication. Я предполагаю, что я вошел в систему через HTTP-логин в браузере, и выход не работает для этого. Я удалил BasicAuthentication, и теперь все работает нормально.

+0

комментирования BasicAuthentication он работал хорошо до тех пор, как я использовал дженерик, когда я перешел обратно в APIView Я до сих пор не выйти из системы – Punit

2

На самом деле выход из системы работает, но при перенаправлении (с целью, которая требует аутентификации, поскольку мы используем разрешение IsAuthenticated) в конце выхода из системы, BasicAuth аутентификации запроса снова используя кэшированные данные заголовка аутентификации HTTP:

auth = request.META.get('HTTP_AUTHORIZATION', b'') 

Так как OP сказал, мы можем отключить BasicAuth и использовать только SessionAuth. Но дело в том, что иногда нам может потребоваться доступ к API без GUI, вместо этого мы можем использовать TokenAuth. Так как BasicAuth/TokenAuth в любом случае не настолько безопасен (https://tools.ietf.org/html/rfc2617), может быть, лучше использовать OAuth2 или другие более безопасные схемы аутентификации. В любом случае это зависит от требований.

1

Я столкнулся с этой проблемой сегодня и решить ее путем изменения порядка на следующее:

'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication', 
    'rest_framework.authentication.BasicAuthentication', 
    'rest_framework.authentication.TokenAuthentication', 
), 
Смежные вопросы