У меня довольно простая логика входа - аналогично официальному решению Django.Логин не работает с Django + nginx + uwsgi
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
обновите uWSGI, как только это возможно, вы используете версию 3 года назад с завершенной поддержкой и множеством известных ошибок. Возможно, это не связано с вашей конкретной проблемой, но, по крайней мере, было бы легче отладить ее. – roberto
Wow, bingo. Я обновился с 1.0.3 до 2.0, и теперь он работает. Благодаря! –