سؤال

أنا أتابع Django 1.3 Web Development.وبالنسبة لتسجيلات الدخول، أتلقى الخطأ التالي

Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
    CSRF token missing or incorrect.

هذه هي إعداداتي.py التطبيقات المضمنة.هذا هو بالضبط كيف يقول الكتاب أنه ينبغي أن يكون.

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'djangocricket.Cricket',
    'djangocricket.cms'
)

يقول الكتاب أنه يجب أن يحتوي على django.contrib.auth.views.login ..وأنا أدرجها في

urlpatterns = patterns('',
    # Examples:
    url(r'^$', 'djangocricket.Cricket.views.index', name='default'),
    url(r'^user/(\w+)/$', 'djangocricket.Cricket.views.user_home', name='user home'),
    url(r'^login/$', 'django.contrib.auth.views.login'),
    # url(r'^djangocricket/', include('djangocricket.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    #url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^news/', 'djangocricket.cms.views.index', name='index'),
    #url(r'^news/(?P<slug>[^\.]+).html', 'djangocricket.cms.views.detail', name='get_single_news_item'),
    url(r'^admin/', include(admin.site.urls)),
)

وتسجيلي/login.html ...نسخة ملصقة من الكتاب.ينبغي أن تفعل.

<html>
<head>
    <title>Django Bookmarks - User Login</title>
</head>
<h1>User Login</h1>
{% if form.errors %}
    <p>Your username and password didn't match.
        Please try again.</p>
{% endif %}
<form method="post" action=".">
    <p><label for="id_username">Username:</label>
        {{ form.username }}</p>
    <p><label for="id_password">Password:</label>
        {{ form.password }}</p>
    <input type="hidden" name="next" value="/" />
    <input type="submit" value="login" />
</form>
</body>
</html>

ماذا ينقصني؟

هل كانت مفيدة؟

المحلول

تحتاج إلى إضافة {% csrf_token %} علامة القالب كطفل لـ form عنصر في قالب جانغو الخاص بك.

بهذه الطريقة، سيعرض القالب عنصرًا مخفيًا بالقيمة المحددة لرمز CSRF المميز.عندما يتلقى خادم Django طلب النموذج، سيتحقق Django من تطابق الرمز المميز مع القيمة التي تم تقديمها في النموذج.يعد ذلك ضروريًا للتأكد من أن طلبات POST (أيطلبات تغيير البيانات) تنشأ من جلسة عميل حقيقية.

لمزيد من المعلومات، راجع وثائق جانغو على:https://docs.djangoproject.com/en/dev/ref/csrf/

فيما يلي نظرة عامة على هجوم تزوير الطلب عبر المواقع:https://www.owasp.org/index.php/CSRF

نصائح أخرى

إذا كنت تستخدم csrf_token علامة القالب ولكن لا تغير أي شيء، تحقق CSRF_COOKIE_DOMAIN جلسة.يجب عليك تعيين None لذلك على بيئة التطوير.

كان لدي نفس المشكلة.قمت بحل هذه المشكلة عندما أضفت {٪ csrf_token٪}.أخيرا الرمز الخاص بي هو:

giveacodicetagpre.

أراد فقط إعطاء معلومات إضافية حول هذا الموضوع.إذا حدث لك من أي وقت مضى، فأنت متأكد من أن الرمز المميز يتم حقنه في النموذج ويتم التعامل مع وظائف العرض كل شيء بشكل صحيح ولكن المشكلة تستمر.تأكد من عدم وجود رمز JavaScript تعطيل حقول الإدخال.حدث لي، بعد بضعة ساعات من التصحيح، أدرك أخيرا ذلك.

giveacodicetagpre.

giveacodicetagpre.

داخل النموذج الخاص بك.هذا عملت من أجلي.فلماذا نستخدم الفندق المطلوب التزوير؟

حسنا، الجواب بسيط جدا، فقد أضفت فقط طبقة أمان أخرى إلى صفحة الويب الخاصة بك، حيث لا يمكن لأي مستخدم ضار التحقق من صحة طلب باستخدام رمز خاطئ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top