django-open-id: ошибка проверки CSRF - PullRequest
1 голос
/ 25 марта 2011

Я выполнил рекомендацию в этом вопросе SO: Каково лучшее решение для OpenID с Django? и установленным django-openid-auth для моего приложения.

Но я просто не могу заставить его работать, я всегда получаю CSRF verification failed. Request aborted., когда пытаюсь войти в систему.

django csrf

Я проверил все:

1

{% csrf_token %} присутствует в шаблоне:

<form name="fopenid" action="{{ action }}" method="post">
    {% csrf_token %}
    <fieldset>
        <legend>Sign In Using Your OpenID</legend>
        <div class="form-row">
            <label for="id_openid_identifier">OpenID:</label><br />
            {{ form.openid_identifier }}
        </div>
        <div class="submit-row ">
            <input name="bsignin" type="submit" value="Log in">
        </div>
 {% if next %}
        <input type="hidden" name="next" value="{{ next }}" />
 {% endif %}
    </fieldset>
</form>

2

В views.py внутри django_openid_auth я обнаружил, что они используют RequestContext:

return render_to_response(template_name, {
                    'form': login_form,
                    redirect_field_name: redirect_to
                    }, context_instance=RequestContext(request))

3.

My MIDDLEWARE_CLASSES содержит CsrfViewMiddleware:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

Я просто не могу понять, что еще может быть не так? У вас есть идеи?

Я использую Django 1.3 beta.

UPDATE

Кажется, это моя глобальная проблема. Я создал простую форму и получил тот же результат:

def index(request):
    return render_to_response('index.html',
                              locals(),
                              context_instance=RequestContext(request))

index.html:

<form action="/" method="post">
    {% csrf_token %}
    <input type="text" name="test">
    <input type="submit">
</form>

Визуализированный HTML:

<form action="/" method="post">
    <div style="display:none"><input type="hidden" name="csrfmiddlewaretoken" value="1fbd5345560d325bf05809260f7d43c3"></div>
    <input type="text" name="test">
    <input type="submit">
</form>

Что не так!?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Я попробовал "manage.py runserver localhost: 8000" вместо "manage.py runserver", и это сработало я думаю, у него есть некоторые проблемы с cookie из-за ip в имени хоста Кстати. я получил эту ошибку со свежей копией django 1.3

0 голосов
/ 25 марта 2011

На самом деле, я думаю, что это была первая ошибка, с которой я столкнулся в Django.Я обновил свою копию до свежего выпуска 1.3, и все начало работать.Отличная работа, разработчики Django!

...