Джанго: токен CSRF отсутствует в сообщении на Facebook в виде подписанного запроса - PullRequest
2 голосов
/ 07 апреля 2011

Я работаю с проектом Django. Цель состоит в том, чтобы импортировать информацию пользователя из Facebook. Для начала я использую социальный плагин регистрации, который предлагает Facebook. У меня есть базовый шаблон, который включает в себя iframe для плагина регистрации; просто так, как предлагает документация Facebook API. Представление, которое отображает этот шаблон, выглядит следующим образом:

def registration(request):
    if (request.method == "POST"): 
        return HttpResponse("it posted!")
    else: 
        return render_to_response("ui/registration.html", {}, 
                                  context_instance=RequestContext(request))

Как только я нажимаю на кнопку регистрации на плагине, и Facebook отправляет мой вид подписанного запроса, Джанго жалуется на отсутствующий токен csrf. Я также попытался явно включить csrf-токен, передав его в контекстный словарь с помощью csrf (запрос), однако это по-прежнему не решает проблему. Быстрый ответ будет принята с благодарностью.

Ответы [ 3 ]

3 голосов
/ 07 апреля 2011

CSRF защита для предотвращения постов между сайтами.Однако в этом случае вы хотите принять сообщение от Facebook, поэтому вам следует использовать декоратор csrf_exempt в своем представлении, который принимает подписанный запрос.Смотрите раздел об исключениях из CSRF: http://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#exceptions

1 голос
/ 25 февраля 2012

ищите приложение fandjango, особенно промежуточное ПО. https://github.com/jgorset/fandjango это сделало это для меня

1 голос
/ 07 апреля 2011

Для этого нужно сделать несколько вещей:

  1. Вам нужно будет передать свой токен csrf в качестве параметра к вашему запросу на Facebook, как показано в конце их документации :
  2. Далее вам нужно будет украсить ваш вид @csrf_exempt, как предложил Марк.
  3. Наконец, на ваш взгляд, вы можете проверить, что токен csrf в порядке. Вы можете украсть логику, взглянув на код промежуточного программного обеспечения django csrf, найденный здесь .

В качестве альтернативы, вместо шагов 2 и 3 вы можете написать собственное промежуточное программное обеспечение для проверки токенов csrf, поступающих с Facebook.

...