2013-10-05 3 views
2

Я настроил Django REST API для SessionAuthentication, TokenAuthentication и OAuth2Authentication для веб-приложений AJAX (и собственных клиентов в будущем).Django REST Framework SessionAuthentication, похоже, не работает?

Проверка подлинности Token en OAuth2 прекрасна, но поведение SessionAuthentication еще не работает, как хотелось бы.

У меня есть два REST API, с идентичной конфигурацией на данный момент:

http://api.sandbox.dev:8080/ и http://www.sandbox.dev:8080/api/

Мой веб-приложение AJAX находится на http://www.sandbox.dev:8080.

Код:

Everytime когда я делаю вызов AJAX к API на api.sandbox.dev от www.sandbox.dev Я получаю ошибку «403 Forbidden». Я думаю, что я сделал все правильно, чтобы заставить вещи работать в кросс-домене или я что-то упускаю?

Заранее благодарим за помощь или советы!

С наилучшими пожеланиями, Кристофа

ответ

1

Это должно работать:

jquery.rest.js

$.ajax({ 
    xhrFields: {withCredentials: true}, 
    ... 
}); 

настройки. py:

CORS_ALLOW_CREDENTIALS = True 
CORS_ORIGIN_WHITELIST = ('www.sandbox.dev:8080',) 

SESSION_COOKIE_DOMAIN = '.sandbox.dev' 
CSRF_COOKIE_DOMAIN = '.sandbox.dev' 
+0

Спасибо mariodev. У меня почти все работает сейчас, но с этими дополнительными настройками я могу только GET (читать) данные из api.sandbox.dev на www.sandbox.dev через AJAX. Когда я пытаюсь выполнить POST, PUT или DELETE, я всегда получаю «403 FORBIDDEN» с сообщением в ответе «{« detail »:« CSRF Failed: токен CSRF отсутствует или неверный. »}. Я также добавил страницы с аутентификацией OAuth2 и токена для того же API на api.sandbox.dev и с тем же токеном CSRF в клиенте AJAX REST, но проблем там нет. – Braek

+0

Я также обновил наиболее важные файлы, перечисленные выше в GitHub. – Braek

+0

См. Обновленный пост, эти два доменных имени являются единственными изменениями, которые я сделал для вашего последнего репо и работы POST. – mariodev

3

Если вы используете Apache mod_wsgi, чтобы служить ему, возможно, потребуется добавить следующие строки в файл конфигурации VirtualHost, так как заголовок авторизации удаляется путем mod_wsgi. Вам нужно добавить следующее в файл конфигурации VirtualHost:

WSGIPassAuthorization On 

Далее ссылка: http://django-rest-framework.org/api-guide/authentication.html#unauthorized-and-forbidden-responses

+0

Спасибо, но я использую встроенный веб-сервер Django (через «python manage.py runningerver»). Я запомню это для того, чтобы положить все в производство. – Braek

Смежные вопросы