Django аутентификация def не вызывает logged_in_success и logged_in_fail сигнал - PullRequest
1 голос
/ 20 февраля 2020

Когда я выполняю аутентификацию по функции

from django.contrib.auth import authenticate

Djna go не запускает сигнал успеха / неудачи, если я использую функцию

from django.contrib.auth import login

это сработает, как и ожидалось. в основном я хочу вызвать сигнал от следующей функции

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

теперь я добавил дополнительную строку к своему коду

login(request, user)

после добавления этого я получаю сигнал здесь

from django.contrib.auth.signals import (
    user_logged_in,
    user_login_failed,
)

Как я могу получить сигнал только от аутентификации def? я использую это для API

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

authenticate просто проверяет предоставленные учетные данные и возвращает User экземпляр в случае успеха ( docs ). Он не выполняет фактический вход в систему. Это делается с помощью функции login ( docs ). Предполагается, что они будут использоваться как вы.

user_logged_in сигнал отправляется login в случае успеха и user_login_failed отправляется authenticate в случае сбоя аутентификации.

2 голосов
/ 20 февраля 2020

Django не отправляет user_logged_in сигнал от authenticate. Он посылает его с login, как вы можете видеть здесь . Однако вы всегда можете запустить сигнал самостоятельно.

from django.contrib.auth import authenticate, user_logged_in


user = authenticate(username=username, password=password)
user_logged_in.send(sender=user.__class__, request=request, user=user)

Или, возможно, написать функцию, которая выполняет оба действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...