Логин не работает с Django + nginx + uwsgi

У меня довольно простая логика входа в систему, похожая на официальное решение Django.

class Login(FormView):
    template_name = 'login.html'
    form_class = AuthenticationForm

    def get(self, *args, **kwargs):
        if self.request.user.is_authenticated():
            return self._get_success_url(self.request)
        return super(Login, self).get(*args, **kwargs)

    def form_valid(self, form):
        self.auth(self.request, form.get_user())
        return super(Login, self).form_valid(form)

    def form_invalid(self, form):
        messages.error(self.request, u'Invalid username or password')
        return super(Login, self).form_invalid(form)

    def get_success_url(self):
        return self._get_success_url(self.request)

    @staticmethod
    def _get_success_url(request):
        if 'next' in request.GET:
            return request.GET['next']
        return settings.LOGIN_REDIRECT_URL

    @staticmethod
    def auth(request, user):
        if user is not None:
            if user.is_active:
                login(request, user)
                assert user == request.user

                if request.session.test_cookie_worked():
                    request.session.delete_test_cookie()

                messages.success(request, u'Success.')
            else:
                messages.error(request, u'Deactivated account.')
        else:
            messages.error(request, u'Invalid password or username.')

        request.session.set_test_cookie()

На сервере разработки все работает нормально. Но на рабочем сервере не удается войти в систему. Пользователь регистрируется, и отображается сообщение Success., но экземпляр пользователя исчезает из request.user.

Что еще более странно - если я перезапускаю службы (nginx + uwsgi), в первый раз логин работает. Если я выйду из системы и попытаюсь снова, это не сработает.

Вторая странность - вход в администрацию Django всегда работает нормально.

Я работаю:

Ubuntu == 12.04 LTS
nginx == 1.1.19
uwsgi == 1.0.3-debian
MariaDB == 5.5.34
Django == 1.5

person Tom Tichý    schedule 03.01.2014    source источник
comment
пожалуйста, обновите uWSGI как можно скорее, вы используете версию 3-летней давности с прекращенной поддержкой и множеством известных ошибок. Может быть, это не связано с вашей конкретной проблемой, но, по крайней мере, было бы проще ее отлаживать.   -  person roberto    schedule 03.01.2014
comment
Вау, бинго. Я обновился с 1.0.3 до 2.0 и теперь все работает. Спасибо!   -  person Tom Tichý    schedule 03.01.2014


Ответы (1)


Проблемы были вызваны более старой версией uwsgi. После обновления с 1.0.3 до 2.0 вход работает нормально.

person Tom Tichý    schedule 03.01.2014