Django身份验证 - 重定向到错误的登录页面URL

24
当用户未登录时,我试图进入只有已验证用户才能访问的网站区域,我应该会被重定向到我的登录网站,并带有 ?next=,以及从我的设置中获取的 LOGIN_REDIRECT_URL。但是在我的地址栏中显示的是 /accounts/login 而不是 /users/login。我应该改变什么来获取正确的URL?
设置:
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
LOGIN_REDIRECT_URL = '/user/profile/'
项目的URL:
import accounts.urls as regUrls

urlpatterns = patterns("",
                        (...)                     
                        (r'^user/', include(regUrls)),                       
                        )

账户应用程序 urls.py:

urlpatterns = patterns('',
                       url(r'^profile/$', profile_edit , name='user_profile'),
                       url(r'^friends_list/$', friends_list),
                       (r'', include('accounts.auth_urls')),
                       )

还有账户认证的URL (这些URL仅仅是用于contrib.auth模块):

from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template
from django.contrib.auth import views as auth_views

    urlpatterns = patterns('',
                           url(r'^login/$',
                               auth_views.login,
                               {'template_name': 'user/login_logout_register/login.html'},
                               name='auth_login'),
                           url(r'^logout/$',
                               auth_views.logout,
                               {'template_name': 'user/login_logout_register/logout.html'},
                               name='auth_logout'),                     
                           url(r'^password/change/$',
                               auth_views.password_change,
                               {'template_name': 'user/login_logout_register/password_change_form.html'},
                               name='auth_password_change'),
                           url(r'^password/change/done/$',
                               auth_views.password_change_done,
                               {'template_name': 'user/login_logout_register/password_change_done.html'},
                               name='auth_password_change_done'),                      
                           url(r'^password/reset/$',
                               auth_views.password_reset,
                               {'template_name': 'user/login_logout_register/password_reset_form.html',
                               'email_template_name': 'user/login_logout_register/password_reset_email.html'},
                               name='auth_password_reset'),                     
                           url(r'^password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
                               auth_views.password_reset_confirm,
                               {'template_name': 'user/login_logout_register/password_reset_confirm.html'},
                               name='auth_password_reset_confirm'),                     
                           url(r'^password/reset/complete/$',
                               auth_views.password_reset_complete,
                               {'template_name': 'user/login_logout_register/password_reset_complete.html'},
                               name='auth_password_reset_complete'),                     
                           url(r'^password/reset/done/$',
                               auth_views.password_reset_done,
                               {'template_name': 'user/login_logout_register/password_reset_done.html'},
                               name='auth_password_reset_done'),
                           )

如果我需要粘贴更多的内容,请告诉我。

1个回答

46

你还需要在设置中设置 LOGIN_URL :

LOGIN_URL = '/user/login'

现在我得到了:http://domain/user/profile/?next=/user/profile/%3Fnext%3D/user/profile/%253Fnext%253D/user/profile/%25253... :/ - tom_pl
LOGIN_URL 应该是 "/user/login" 而不是 "/user/profile",在你的问题中漏掉了这一点。已经进行了更新。 - ars
在我的情况下,只指定登录视图的名称也可以生效:LOGIN_URL = 'login' - Clerni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接