Проблема с аутентификацией в django с помощью имени пользователя и лица
До сих пор я могу выполнять двухфакторную аутентификацию (имя пользователя + пароль + лицо)
.
Я хочу знать, как изменить аутентификацию, используя только имя пользователя и лицо.
view.py
def face_login(request):
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
username = form.cleaned_data ['username']
password = form.cleaned_data['password']
face_image = prepare_image(form.cleaned_data['image'])
face_id = FaceIdAuthBackend()
user = face_id.authenticate(username=username,password=password,face_id=face_image)
if user is not None:
login(request, user)
return redirect('home')
else:
messages.info(request, "Username, password or face id didn't match.")
return redirect('facelogin')
else:
form = AuthenticationForm()
context = {'form': form}
return render(request, 'django_two_factor_face_auth/facelogin.html', context)
enter code here
model.py
class UserFaceImage(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to=content_file_name, blank=False)
authenticate.py
class FaceIdAuthBackend(ModelBackend):
def authenticate(self, username=None, password=None, face_id=None, **kwargs):
try:
user = User.objects.get(username=username)
if self.check_face_id(face_id=user.userfaceimage.image, uploaded_face_id=face_id):
return user
except User.DoesNotExist:
User().set_password(password)
def check_face_id(self, face_id=None, uploaded_face_id=None):
confirmed_image = face_recognition.load_image_file(face_id)
uploaded_image = face_recognition.load_image_file(uploaded_face_id)
face_locations = face_recognition.face_locations(uploaded_image)
if len(face_locations) == 0:
return False
confirmed_encoding = face_recognition.face_encodings(confirmed_image)[0]
unknown_encoding = face_recognition.face_encodings(uploaded_image)[0]
results = face_recognition.compare_faces([confirmed_encoding], unknown_encoding)
if results[0] == True:
return True
return False