我之前问过类似的问题,但我进行了更多的研究,这个版本应该有所不同。在单个Django视图中注册、验证和登录用户似乎是一些SO用户遇到的问题,并且还没有得到真正的解答。
问题在于,我在一个单独的Django视图中注册、验证和登录用户。对于大多数用户来说,这很好,但对于其他用户,他们随后的请求(他们在我的网站上点击链接)会返回匿名用户。某种方式,已登录用户失去了他们的会话并被重定向到我的站点上不需要身份验证的页面。
当他们通过纯登录视图(而不是注册+登录视图)登录时,会话数据保持完好。问题似乎确实与在单个视图中注册和登录有关。
请参见此帖子以了解相同的问题:https://stackoverflow.com/questions/1693726/problem-with-combined-authentication-login-view。
有人建议这可能是线程问题。我也看到有人建议它涉及缓存会话数据的后端。
问题在于,我在一个单独的Django视图中注册、验证和登录用户。对于大多数用户来说,这很好,但对于其他用户,他们随后的请求(他们在我的网站上点击链接)会返回匿名用户。某种方式,已登录用户失去了他们的会话并被重定向到我的站点上不需要身份验证的页面。
当他们通过纯登录视图(而不是注册+登录视图)登录时,会话数据保持完好。问题似乎确实与在单个视图中注册和登录有关。
请参见此帖子以了解相同的问题:https://stackoverflow.com/questions/1693726/problem-with-combined-authentication-login-view。
有人建议这可能是线程问题。我也看到有人建议它涉及缓存会话数据的后端。
你认为这个错误实际上与什么有关吗?我无法重现这个错误,这真的很让我束手无策。
编辑-我应该注意到我正在使用默认的数据库支持会话。
这是我的注册/登录视图。
def splash_register(request):
if request.session.get('beta'):
if request.method=='POST':
userform=MyUserCreationForm(request.POST)
if userform.is_valid():
#username of <30 char is required by Django User model. I'm storing username as a hash of user email
user=userform.save(commit=False)
user.username=hash(user.email)
user.save()
username=user.username
password=str(userform.cleaned_data['password'])
user=auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request,user)
request.session['first_visit']=True
return HttpResponseRedirect("/")
else:
return HttpResponseRedirect('/splash/register/')
else:
userform=MyUserCreationForm(request.POST)
return render_to_response("website/splash_register.html", {'userform':userform}, context_instance=RequestContext(request))
return render_to_response("website/splash_register.html", context_instance=RequestContext(request))
else:
return HttpResponseRedirect('/splash/')