login不支持Django + nginx + uwsgi

我有相当简单的login逻辑 – 类似于官方的Django解决scheme。

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() 

在开发服务器上一切正常。 但在生产服务器login失败。 用户被logging并且消息Success. 显示,但用户实例从request.user消失。

更奇怪的是 – 如果我重新启动服务(nginx + uwsgi),第一次login的时候就起作用了。 如果我注销并重试,则不起作用。

第二件奇怪的事情 – login到Djangopipe理工作总是好的。

我正在运行:

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

麻烦是由旧版本的uwsgi引起的。 在从1.0.3升级到2.0之后登录工作正常。