Как я могу запросить уже вошедшего пользователя подтвердить пароль для входа на определенную страницу в django?
Я работаю над приложением на django. В приложении есть приборная панель. Как я могу сделать так, чтобы каждый раз, когда пользователь хочет получить доступ к приборной панели, он должен подтвердить свою личность, используя тот же пароль, который он использует для входа в это приложение?
Спасибо
# Убедитесь, что комбинация USERNAME и PASSWORD существует, используя метод AUTHENTICATE,
Views.py:
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
#IN YOUR CASE get the pwd using forms or something,
instance_password = request.post.get('the_pwd_field')
user = authenticate(request, username= request.user.username, password= instance_password)
if user is not None:
# REDIRECT TO THE DASHBOARD
else:
# FAIL CASE SCENARIO
В views.py
from django.contrib.auth.hashers import check_password
form = YourFormForPassword(request.POST or None)
if form.is_valid():
currentpasswordentered = form.cleaned_data.get("try_password")
currentpassword = request.user.password
authenticate_user = check_password(currentpasswordentered, currentpassword)
if authenticate_user:
# REDIRECT TO THE DASHBOARD
else:
#Redirect to other page or keep same login page
Если вы хотите, чтобы пользователь явно вводил учетные данные перед доступом к приборной панели, то вы должны вернуть "форму", которая принимает учетные данные от пользователя, когда он пытается получить доступ к приборной панели.
def dashboard_login_view(request):
context = {}
if request.method == 'POST':
form = DashboardLoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('dashboard_login_username').lower()
password = form.cleaned_data.get('dashboard_login_password')
authenticated = check_password(password)
if authenticated:
return HttpResponseRedirect(reverse('dashboard_view'))
else:
messages.error('User is not authenticated.')
return HttpResponseRedirect(reverse('login'))
else:
context['form_one'] = DashboardLoginForm()
return render(request, 'dashboardlogin.html', context)