2013-06-20 1 views
0

Я пытаюсь получить 'Multi Authentication' для работы в Tasty Pie. До сих пор ApiKeyAuthentication() работает над внешними вызовами, но когда я использую API на своем собственном сайте Django 'SessionAuthentication' (тот же сайт, на котором размещен API), он не выполняет аутентификацию, несмотря на вход пользователя.Проблемы с Django с многократной аутентификацией в вкусном пироге SessionAuthentication не работает

Я что-то пропустил?

Вкусный пирог Doc на Мульти Authentication here

Мой сайт:

class CommonMeta: 
    """ 
    Based Mata to which all other model resources extend/inherit. 
    """ 
    # MultiAuthentication is used here, wraps any number of other authentication classes, 
    # attempting each until successfully authenticating. 
    authentication = MultiAuthentication(ApiKeyAuthentication(), SessionAuthentication()) 
    authorization = UserObjectsOnlyAuthorization() 



class ContactResource(MultipartResource, ModelResource): 
    class Meta(CommonMeta): 
     queryset = Contact.objects.all() 
     resource_name = 'contacts' 
     list_allowed_methods = ['get'] 
     detail_allowed_methods = ['get', 'put', 'post'] 
     excludes = ['id'] 

Мой запрос AJAX:

$.ajax({ 
      url: '/api/v1/contacts/' + id + "/", 
      type: 'PUT', 
      data: {"company": "test"}, 

      // On success. 
      success: function(data) { 
      alert('Load was performed.'); 
      } 

     }); 

    }; 

ответ

1

Я думаю, что это работает должным образом, вы возможно, просто пропустил одну важную заметку о Та sty Pie docs

It requires that the user has logged in & has an active session. 
They also must have a valid CSRF token. 

Для работы необходимо передать действительный токен CSRF для SessionAuthentication.

Вот пример:

Первая установка функция для отправки csrftoken с каждым АЯКС запроса

function csrfSafeMethod(method) { 
    // these HTTP methods do not require CSRF protection 
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 
} 

Затем на вашем АЯКС установки:

$.ajaxSetup({ 
      crossDomain: false, // obviates need for sameOrigin test 
      beforeSend: function(xhr, settings) { 
       if (!csrfSafeMethod(settings.type)) { 
        xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken')); 
       } 
      } 
     }); 

Последний в шаблоне доном Не забудьте указать тег {% csrf_token%}!