Я пытаюсь настроить бэкэнд аутентификации по умолчанию для моего проекта django ( версия 2.2.7 ), поэтому я использую бэкэнд пользовательской аутентификации .
Я создал представление базы данных под названием v_auth_user
, которое является моей моделью. В бэкэнде аутентификации я выбираю из этого представления, используя необработанный запрос (мне нужно использовать функцию базы данных password_hash
для проверки пароля ha sh, надеюсь, это сработает)
Conserns:
- Мне нужно указать User full_long_name и адрес электронной почты, когда пользователь будет аутентифицирован. Как?
- Все это будет работать? Что вы думаете?
Модель:
class vAuthUser(models.Model):
lb_id_no = models.IntegerField(primary_key=True)
user_login_name = models.CharField(max_length=20)
password = models.CharField(max_length=30)
full_long_name = models.CharField(max_length=20)
lb_email = models.EmailField(max_length=50)
class Meta:
managed = False
db_table = 'v_auth_user'
Пользовательский бэкэнд аутентификации:
from django.contrib.auth.models import User
from erp.models import vAuthUser
class OracleBackend:
def authenticate(self, request, username=None, password=None):
try:
user = vAuthUser.objects.raw(f'select * from v_auth_user where user_login_name={username}
and password=password_hash({username},{password}) and rownum=1')
if user:
return user
except User.DoesNotExist:
return None
def get_user(self, lb_id_no):
try:
return vAuthUser.objects.get(pk=lb_id_no)
except User.DoesNotExist:
return None