2014-01-03 5 views
2

У меня довольно простая логика входа - аналогично официальному решению 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 
+2

обновите uWSGI, как только это возможно, вы используете версию 3 года назад с завершенной поддержкой и множеством известных ошибок. Возможно, это не связано с вашей конкретной проблемой, но, по крайней мере, было бы легче отладить ее. – roberto

+2

Wow, bingo. Я обновился с 1.0.3 до 2.0, и теперь он работает. Благодаря! –

ответ

2

Неприятность была вызвана старой версией uwsgi. После обновления с 1.0.3 до 2.0 журнал работает правильно.

Смежные вопросы