我具有用于自定义登录的代码:
def login(request):
if request.user.is_authenticated:
return render(request, 'listings/index.html', {})
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
if not request.POST.get('remember_me', None):
request.session.set_expiry(0)
auth_login(request, user)
return redirect('dashboard')
else:
messages.error(request, "Les informations que vous venez d'entrer sont incorrects. Veuillez réessayer.")
return render(request, 'dashboard/login.html', {})
return render(request, 'dashboard/login.html', {'randomtip': random.choice(RandomTip.objects.all())})
我的所有视图都有@login_required和@user_passes_test装饰器。如您在登录功能中所见,当用户通过身份验证并登录后,他/他将被重定向到仪表板。 但是我有一个会话过期限制(用户的会话在6分钟后过期)。并且当它们在特定页面中时,它们将在Cookie到期后被重定向到登录名。这里的问题是,如果他们位于仪表板以外的页面中,则在他们登录后会被重定向到仪表板。
我希望他们再次登录后留在同一页面上。我如何知道当前访问页面的路径并将其放在这里:return redirect(current_page)
?
答案 0 :(得分:0)
这是django在cookie过期时自动完成的,用户不会传递@login_required,否则他将被传递给具有此类html属性的登录页面
http://127.0.0.1:8000/login/?next=/the_page_he_was_in/
这里的密钥是/?next = /,它会重定向普通的登录重定向,并将用户直接发送到他所在的页面