Формы входа перестают работать при переходе на производство - PullRequest
0 голосов
/ 12 июня 2018

Я использую Wagtail 2.1, Django 1.11.13, django-auth-ldap 1.6.1 и gunicorn 19.8.1 (Nginx в качестве прокси-сервера).

Я создал два разных способа входа в систему, AJAX-представление:

def loginajax(request):
# Identation is okay, can't seem to paste it properly
if request.method == 'POST':
    login_form = AuthenticationForm(data=request.POST)
    response_data = {}
    if login_form.is_valid():
        response_data['result'] = '1'
        response_data['message'] = 'You"re logged in'
        user = authenticate(username=login_form.cleaned_data['username'],
                            password=login_form.cleaned_data['password'])
        login(request, user)
    else:
        response_data['result'] = '0'
        response_data['message'] = login_form.errors

    return JsonResponse(response_data)

- обычная, довольно стандартная форма входа в Django.

{% block content %}
<div class="login-form" style="width: 90%; margin: 0 auto;">
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}

{% if next %}
    {% if user.is_authenticated %}
    <p>Your account doesn't have access to this page. To proceed,
    please login with an account that has access.</p>
    {% else %}
    <p>Please login to see this page.</p>
    {% endif %}
{% endif %}

<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
    <td>{{ form.username.label_tag }}</td>
    <td>{{ form.username }}</td>
</tr>
<tr>
    <td>{{ form.password.label_tag }}</td>
    <td>{{ form.password }}</td>
</tr>
</table>

<input type="submit" value="login" />
<input type="hidden" name="next" value="{% if next %}{{ next }}{% endif %}" />
</form>
</div>
{% endblock %}

Я использую LDAP и обычный бэкэнд аутентификации в качестве резервной копии:

AUTHENTICATION_BACKENDS = [
  'django_auth_ldap.backend.LDAPBackend',
  'django.contrib.auth.backends.ModelBackend',
]

При запуске моего кода в режиме разработки (через runserver manage.py) вход в систему работает отлично для обоих методов входа (я вижу отладочные сообщения dlango-ldap, которые проверяют моего пользователя).

Однако, как только я использую режим готовности к работе (использование gunicorn, отключение DEBUG, переключение на производственные настройки), все мои запросы входа в систему получают ошибку LDAPError:

При попытке аутентификации bvolchok: INVALID_CREDENTIALS возникает ошибка LDAPError.({'desc': 'Неверные учетные данные', 'информация': '80090308: LdapErr: DSID-0C09042A, комментарий: ошибка AcceptSecurityContext, данные 52e, v3839'},)

Для представления Ajax, печать запроса. Возвращение объекта POSTТот же результат с интегрированным сервером Django и Gunicorn:

QueryDict: {'csrfmiddlewaretoken': ['redacted'], 'username': ['redacted'], 'password': ['отредактировано '],' next ': [' ']}>

По сути, моя проблема в том, что в "рабочем режиме" login_form.is_valid () всегда имеет значение False ...

1 Ответ

0 голосов
/ 13 июня 2018

Глупый я, я передавал переменные окружения в django-auth-ldap, и у одного из них есть пробел, и его значение было обрезано.

...