Можно ли использовать django_neomodel со встроенной системой аутентификации Django?
Мне интересно, как лучше всего хранить данные аутентификации пользователей в базе данных neo4j с помощью django, используя встроенную систему аутентификации.
У кого-нибудь есть такой опыт?
Я представляю, что это как-то связано с подклассами AbstractBaseUser и BaseUserManager, но я не могу этого понять.
Буду очень признателен за фрагмент кода, если кто-то достиг этого раньше.
Большое спасибо
0 ответов
Если вы хотите расширить модель пользователя Django, сначала прочтите эту статью. Он показывает различные способы расширения модели User. В моем последнем обходном пути мне нужна была вся информация в Neo4j, поэтому я адаптировал свою модель, чтобы в моей модели были поля пользователя (это была модель Студента). Каждый раз, когда новый студент регистрируется в приложении, у меня появляется сигнал реагировать после сохранения (post_save), и он сохраняет пароль и имя пользователя. Вы можете изучить сигналы Django здесь
Для модели у меня есть:
class StudentProfile(DjangoNode):
first_name = StringProperty(max_length=30)
last_name = StringProperty(max_length=150)
email = EmailProperty()
birth = DateProperty()
username = StringProperty(max_length=150, unique=True)
password = ''
Для сигнала:
@receiver(post_save, sender=StudentProfile, dispatch_uid='create_user_student')
def create_user_student(sender, instance, created, **kwargs):
if created:
user = User.objects.create_user(instance.username)
user.set_password(instance.password)
user.save()
@receiver(post_delete, sender=StudentProfile, dispatch_uid='delete_user_student')
def delete_user_student(sender, instance, **kwargs):
User.objects.filter(username=instance.username).delete()
Помимо основного представления StudentProfile, у меня есть представление, в котором используется встроенная система аутентификации Django:
from django.contrib.auth import authenticate, login as do_login, logout as do_logout
...
@api_view(["POST"])
def login(request):
username = request.data.get('username')
password = request.data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
do_login(request, user)
return Response({'login': 'ok'}, status=status.HTTP_200_OK)
return Response({'login': 'Error on credentials'}, status=status.HTTP_403_FORBIDDEN)