2

我想知道最好的方法是使用内置的身份验证系统将用户身份验证数据存储在带有 django 的 neo4j 数据库中。

有没有人有这样做的经验?

我想象它与继承 AbstractBaseUser 和 BaseUserManager 有关,但对于我的生活,我无法弄清楚。

如果有人以前实现过这一点,将非常感谢代码片段。

非常感谢

4

1 回答 1

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)
于 2019-07-10T03:25:57.767 回答