0

LDAP エントリを持つすべてのユーザーがパスワードなしでログインできるように、認証をオーバーライドしました。ログイン画面の管理者バージョンでは機能しますが、auth_views.login に基づくものでは機能しません (auth_views.login は、送信後に同じログイン フォームに更新されるだけです)。

ExistsInLDAP.authenticate() メソッドにデバッグ ブレークポイントを追加しましたが、django 管理者ログインではブレークしますが、auth_views.login ではブレークしないため、コード自体ではなく、グルー コード/構成に問題があります...考える。

urls.py:

url(r'^accounts/login/$', auth_views.login, name='login'),

設定.py

AUTHENTICATION_BACKENDS = (
        'misc.auth.ExistsInLDAP',
        'django.contrib.auth.backends.ModelBackend',
        )

AUTH_PROFILE_MODULE = "account.UserProfile"

その他/auth.py:

class ExistsInLDAP(ModelBackend):
    """
    Django authentication plugin to just check if user is in ldap.
    """

    def authenticate(self, username=None, password=None):
        """
        Validate the user is in ldap.  Password is ignored.
        """
        [ ldap checking ....]

        user, created = User.objects.\
                          get_or_create(username=username,
                                        defaults={
                                            'first_name': r['givenName'][0],
                                            'last_name': r['sn'][0],
                                            'email': r['mail'][0],
                                            'is_superuser': True,
                                            'is_staff': True,
                                            'password': '!',
                                        })

        if created:
            user.set_unusable_password()

        return user

ログイン テンプレート:

{% extends "base.djhtml" %}

{% block title %}Login{% endblock %}

{% block content %}

    <div class="row">
        <div class="col-md-10 col-md-offset-1">
            <form role="form" method="post" action="{% url django.contrib.auth.views.login %}">

                {% csrf_token %}

                {% if form.errors %}
                <p class="form-error login-form-error">
                    {{ form.get_error }}
                </p>
                {% endif %}

                <div class="form-group">
                    <label for="{{ form.username.id }}">{{ form.username.label_tag }}:</label>
                    {{ form.username }}@vmware.com
                    <br>
                    {% comment %}XXX: group has decided passwords aren't needed.{% endcomment %}
                    <input type="text" hidden="true" value="1234567890" id="{{ form.password.id_for_label }}"/>
                    <input type="hidden" name="next" value="{{ next }}" />
                </div>

                <button type="submit" class="btn btn-default">Login</button>
            </form>
        </div>
    </div>

{% endblock %}
4

1 に答える 1

0

わかりました、この質問を入力すると、答えがわかりました。私はまだ投稿して、他の人のためにここに答えると思います。

問題は、非表示のパスワード フィールドです。

私の HTML フォームには、必要なすべての HTML ラベルが含まれていません。フォームの form.as_p バージョンをレンダリングして比較することで、これを理解しました。パスワード フィールドに「名前」がありませんでした:

<input type="password" name="password" id="id_password" />
于 2013-11-05T18:50:01.300 に答える