登录不适用于Django + Nginx + uwsgi [英] Login doesn't work with 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屋!