1

手がかりを教えていただければ幸いです。経験がないので、誤解されているかもしれません。

私はハニーポットを使用しています。より具体的honeypot.middleware.HoneypotMiddlewareHONEYPOT_FIELD_NAMEは、API ( settings.py ) で使用しています。

現時点では十分なので、ログイン、パスワードの変更、からのリセットの基本的な実装を使用していますdjango.contrib.authログイン時に小さなカスタマイズを行ったので、URL ( authentication_form=CustomAuthenticationForm) に追加しました。

ログインページが機能するため(フォームでもある)、何が欠けているのかわかりませんが、パスワードの変更、リセットは400 Bad Requestを返します。ハニー ポット エラー (honey_pot_fieldname)。リクエストは中止されました。

ジャンゴ: 2.1.2
ジャンゴ-ハニーポット: 0.7.0

【コードで更新】

設定.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
....
    'honeypot',
    ]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'honeypot.middleware.HoneypotMiddleware',
]

HONEYPOT_FIELD_NAME = config('HONEYPOT_FIELD_NAME')

フォーム.py

from django.contrib.auth.forms import AuthenticationForm

class CustomAuthenticationForm(AuthenticationForm):
    error_messages = {
        'invalid_login': _(
            "Please enter a correct %(username)s and password. Note that both "
            "fields may be case-sensitive."
        ),
        'inactive': _("This account is inactive."),
        'suspended': _("Your account has been temporarily suspended. For more information,\
                   please contact us."),
    }

    def clean(self)
    def confirm_login_allowed(self, user)

urls.py

from django.contrib.auth import views as auth_view

urlpatterns = [
....

    # ---- BASIC USER AUTHENTICATION (DJANGO)
    path('api/login/', auth_view.LoginView.as_view(authentication_form=CustomAuthenticationForm), name='login'),
    path('api/logout/', auth_view.LogoutView.as_view(), name='logout'),

    # ---- PASSWORD CHANGE, RESET
    path('api/password_change/', auth_view.PasswordChangeView.as_view(), name='password_change'),
    path('api/password_change_done/', auth_view.PasswordChangeDoneView.as_view(),
         name='password_change_done'),
....
]

【テンプレート】

テンプレート/登録/login.html

{% extends 'base.html' %}
{% load i18n widget_tweaks %}

{% block head %}
    {% load bootstrap3 %}

    {{ form.media }}
{% endblock %}

{% block content %}
    <div class="col-sm-4 col-sm-offset-4" style="margin-top:20px;">
        <h1 class="display-4 text-center" >User login</h1>
        <legend></legend>
        <form method="post">
            {% csrf_token %}
            {% bootstrap_form form layout='inline' %}
            {% buttons %}
                <button type="submit" class="btn btn-primary center-block" style="margin-top: 20px">Log in</button>
            {% endbuttons %}
        </form>
    </div>
{% endblock %}

templates/registration/password_change_form.html

{% extends 'base.html' %}
{% load i18n widget_tweaks %}
{% block head %}
    {% load bootstrap3 %}

    {{ form.media }} 
{% endblock %}

{% block content %}
    <div class="col-sm-4 col-sm-offset-4" style="margin-top:20px;">
        <h1 class="display-4 text-center" >{{ title }}</h1>
        <legend></legend>
        <form method="post">
            {% csrf_token %}
            {% bootstrap_form form layout='inline' %}
            {% buttons %}
                <button type="submit" class="btn btn-primary center-block" style="margin-top: 20px">Change password</button>
            {% endbuttons %}
        </form>
    </div>
{% endblock %}

前もって感謝します!

4

1 に答える 1