django - Django + nginx + uwsgi 无法登录

标签 django authentication ubuntu 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

最佳答案

问题是由旧版本的 uwsgi 引起的。从1.0.3升级到2.0后登录正常。

关于django - Django + nginx + uwsgi 无法登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20899996/

相关文章:

带有M2M字段的Django对象唯一性 hell

authentication - Authserver.exe 将不会启动

docker - 错误 "You don' t 已安装 docker-compose”但已安装 'Docker Compose version v2.3.3'

django - 如果调用 request.FILES 属性,则嵌套 APIView 会中断请求

django - 由于 ec2 服务器中的 EnvironmentError,无法安装包

Django 在单独的数据库上测试给出 "OperationalError: no such table: auth_user"

java - 在 Active Directory 中查找具有网络 ID 的用户需要搜索过滤器

mongodb - 使用 mongodb v2.4.8 创建具有 "dbAdminAnyDatabse"角色的管理员

python - Ubuntu 错误 — 无法从 'gcd' 导入名称 'fractions'

php - 在 php xampp ubuntu 中找不到类 'MongoClient'