2012-09-15 44 views
1

我试图让用户登录后立即自动登录。他们刚刚输入了他们所需的用户名和两个匹配的密码,我想授予访问该网站没有更多的摩擦。但是,我目前的身份验证和使用身份验证的用户对象进行登录的视图不起作用,即视图在注册后重定向到配置文件页面,但配置文件页面为@login_required装饰器受保护,因此重定向是因为登录失败。我已广泛调试和环顾四周。Django身份验证后端和自动登录

我试过所有我能想到的诉诸第三方注册应用程序。人们提出后端存在问题或特殊之处,但我不明白为什么我无法在一个视图中注册,验证和登录。

views.py(相关部分)

@login_required 
def user(request, user_id): 
    profile_user = User.objects.get(id=user_id) 
    context = RequestContext(request)  
    context['profile_user'] = profile_user 
    return render_to_response('profile.html', context) 


def register(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      new_user = form.save() 
      new_user = authenticate(username = request.POST['username'], 
            password = request.POST['password1']) 
      if new_user is not None: 
       login(request, new_user) 
       context = RequestContext(request)  
       context['user_id'] = new_user.id 
       context['new_user'] = new_user 
       url = '/user/%s/' % new_user.id  
       return HttpResponseRedirect(url) 
    else: 
     form = UserCreationForm() 
    return render_to_response("registration/register.html", {'form': form}, 
           context_instance=RequestContext(request)) 

你怎么处理?

+0

我和你一样(authenticate()然后登录()),它在我的应用程序中正常工作。对不起,这不是很有用 - 但你绝对是在正确的轨道上。 –

+0

这是令人心碎的新闻,因为我已经尝试过将所有事情都整理出来。它开始感觉到个人。 – KindOfGuy

回答

0

你可以把它的工作:

  1. 通过简单的视图重定向到一个中间模板,它将设置客户端上的会话cookie,你可以表明,像在“登记完成记录的消息..。 。“
  2. 在3-5秒的超时后重定向到配置文件页面。这一次,请求将携带身份验证cookie,个人资料页面将被访问。
+0

如果你重定向,你不能携带你的POST变量,对吧?所以在下一个视图可以使用它登录之前,密码将会丢失。 – KindOfGuy

+0

但用户已经在视图“注册”内登录。当您在“注册”后显示中间页面时,会话也会作为cookie存储在客户端上,并且cookie将通过浏览器发回到下一个视图..在您的案例“用户”中。用户视图将读取该会话cookie并验证用户,不需要密码。 – trappedIntoCode