1

私はこのSOの質問で推奨を休みました:Djangoを使用したOpenIDの最良の解決策は何ですか?django-openid-auth私のアプリケーション用にインストールしました。

しかし、私はそれを機能させることができませんCSRF verification failed. Request aborted.。ログインしようとすると常に機能します。

django csrf

私はすべてをチェックしました:

1.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.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.3。

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',
)

他に何が間違っているのか理解できませんか?あなたはなにか考えはありますか?

Django1.3ベータ版を使用しています。

アップデート

これは私の世界的な問題のようです。単純なフォームを作成し、同じ結果が得られました。

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>

どうしたの!?

4

2 に答える 2

1

「manage.pyrunserver」の代わりに「manage.pyrunserverlocalhost:8000」を試しましたが、ホスト名のIPが原因でCookieの問題が発生していると推測されます。django1.3の新しいコピーでこのエラーが発生しました

于 2011-06-17T15:33:19.487 に答える
0

実際、Djangoで最初に遭遇したバグだと思います。コピーを1.3の新しいリリースに更新し、すべてが機能し始めました。よくやった、Django開発者!

于 2011-03-25T10:28:13.823 に答える