2012-09-13 139 views
0

我不能确定为什么验证不在此注册视图中工作。我说因为用户正在进入数据库,并且它正在重定向到下一个需要的页面(它有一个login_required装饰器),但是它会重定向回登录页面。 Authenticate使用给定的值返回shell中的新用户。我也在这里调试和粘贴:http://dpaste.org/J1HZ5 /出了什么问题?验证注册头痛

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']) 

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

urls.py:

urlpatterns = patterns('', 
    # Examples: 
    url(r'^$', 'crewcal.views.index', name='home'), 
    # url(r'^ssc/', include('ssc.foo.urls')), 

    url(r'^events/(?P<event_id>\d+)/$', 'crewcal.views.event'), 
    url(r'^events/new/$', 'crewcal.views.new_event', name='new_event'), 
    url(r'^commit/$', 'crewcal.views.commit'), 
    url(r'^user/(?P<user_id>\d+)/$', user, name='user'), 
    url(r'^users/$', 'crewcal.views.users'), 

    url(r'^register/$', register, name='join'), 
    url(r'^login/$', 'django.contrib.auth.views.login'), 
    url(r'^logout/$', logout, {'next_page': '/'}, name='logout'), 
    url(r'^log_in/$', log_in, name='log_in'), 

    # Uncomment the admin/doc line below to enable admin documentation: 
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

    # Uncomment the next line to enable the admin: 
    url(r'^admin/', include(admin.site.urls)), 
) 

感谢

+0

用你的'urls.py'更新这个问题 –

+0

它现在在那里。谢谢。 – KindOfGuy

回答

0

你安装Django的会话中间件?

+0

默认情况下启用会话中间件。 –

+0

是的,它是活动的。 – KindOfGuy

0

您可能想要发布您的UserCreationForm代码,但我注意到的一件事是您正在运行authenticate(...)调用,但并未实际检查其结果并重定向。查看Django源代码,有一个内置身份验证表单(django.contrib.forms.AuthenticationForm),它验证authenticate()调用的结果是否为非,并且用户处于活动状态,如果不是,则会引发表单错误。

+0

的确如此。但为什么我应该这样做?如果用户创建表单正确验证,那么要验证的用户信息应该是新鲜和纯净的,并且肯定不会失败。无论如何,我知道它是正确的(从数据库和shell测试),但authenticate()没有它。 PS。 UserCreationForm是默认值:'from django.contrib.auth.forms import UserCreationForm'。感谢您的关注。 – KindOfGuy

0

你的问题是这一行:

url(r'^user/(?P<user_id>\d+)/$', user, name='user'), 

确保user是一个有效的视图。

+0

这是一个有效的观点。当我独立于寄存器进行调用时,它可以工作。我的问题是(调试了这个),一旦注册完成,它会重定向到一个用户页面,然后@login_required装饰器再次重定向到登录。如果我删除了login_decorator,则后登记重定向会将我留在用户页面上,这意味着登录在登录时没有正确发生。 – KindOfGuy

0

您的密码字段是password1还是password

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']) # here? 

      login(request, new_user) 
      # rest of the code...