需要认真的帮助.
我有一个用django/python编写的应用程序,我必须扩展它并在此应用程序中包含一些其他解决方案作为"app".例如,我要集成的应用程序名为"my_new_app"现在有一个为主应用程序编写的后端身份验证,我无法使用它.我有一个mysql数据库来查询,主应用程序主要使用cassendra和redis.所以我的问题是,有没有什么办法可以为新的应用程序"my_new_app"使用单独的身份验证后端,并在同一个域中运行它们?问题可能不是那么清楚,如果被问到我会澄清.
我以前曾问过类似的问题,但我做了一些研究,这次迭代应该有点不同.似乎有几个SO用户在单个视图中注册和登录用户时遇到了问题,但实际上并没有得到回答.
问题是我在一个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/')
Run Code Online (Sandbox Code Playgroud)