繁体   English   中英

django login_required装饰器,即使登录后也始终重定向到登录页面

[英]django login_required decorator, always redirect to login page, even after logging in

views.py中的代码

def custom_login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)            
            return redirect('main')
        else:
            return redirect('login')
    else:
        user = AuthenticationForm()
        return render(request, 'index.html', {'form': user})

@login_required
def main(request):
    return render(request, 'main.html')

urls.py

urlpatters =[url(r'^$', views.custom_login, name='login'),
url(r'^main', views.main, name='main')]

在settings.py中

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',]

LOGIN_URL = 'login'
LOGIN_REDIRECT_URL = 'main'

如果我不将login_required装饰器放在main上,则可以重定向到main。 但是,如果我使用login_required装饰器,则在使用URL http://localhost:9000/sample_app/?next=/sample_app/main登录后将重定向到登录页面,我正在将python3与django一起使用

更新我犯了一个愚蠢的错误,我在设置中启用了这些设置。 SESSION_COOKIE_SECURE = True

CSRF_COOKIE_SECURE = True

拒绝了正常的http请求。 但是它可以使用SSL

可能的错误。 =>您的用户是否活跃? 如果没有,请尝试激活该帐户。

=>尝试使用电子邮件进行身份验证,例如

user2=None

   try:
        user2=User.objects.get(username=username) # filter.first should do same
    except:
        pass
    user = authenticate(username=username, password=password)
    if user is None and user2 is not None:
        user = authenticate(username=user2.email,password=password)

=>尝试处理“下一个”参数

希望这可以帮助。

我认为您在身份验证方法中使用的用户不活跃。

验证方法检查用户是否处于活动状态。 如果用户未处于活动状态,则它将返回None;如果用户处于活动状态,则将返回User实例。

您需要在视图中更改此行,

user = authenticate(request, username=username, password=password) 

至,

user = authenticate(username=username, password=password) 

我犯了一个愚蠢的错误,我在设置中启用了这些设置。

SESSION_COOKIE_SECURE = True

CSRF_COOKIE_SECURE = True

拒绝了正常的http请求。 禁用它可以在http中使用。 但是它可以使用SSL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM