登录不适用于Django + Nginx + uwsgi [英] Login doesn't work with Django + nginx + uwsgi

查看:73
本文介绍了登录不适用于Django + Nginx + uwsgi的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的登录逻辑非常简单-类似于官方的Django解决方案.

I have quite simple login logic - similar to official Django solution.

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

在开发服务器上,一切正常.但是在生产服务器上登录失败.已记录用户,并显示消息成功.,但用户实例从 request.user 中消失.

On development server everything works fine. But on production server login fails. User is logged and the message Success. is shown, but user instance disappears from request.user.

更奇怪的是-如果我重新启动服务(nginx + uwsgi),则首次登录有效.如果我注销并重试,则无法使用.

What is even more strange - if I restart services (nginx + uwsgi), for the first time login works. If I log out and try again, it doesn't work.

第二件事-登录Django管理总是可以的.

Second strange thing - login to Django administration works always fine.

我正在跑步:

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后,可以正常登录.

Troubles were caused by older version of uwsgi. After upgrading from 1.0.3 to 2.0 log in works all right.

这篇关于登录不适用于Django + Nginx + uwsgi的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆