使用令牌而不是密码访问Django Admin

时间:2020-09-28 05:43:56

标签: django

我将Django与Django Rest Framework一起用作网站的后端。禁用注册,并且禁用使用密码登录。用户可以注册和登录的唯一方法是使用Django Social Auth,它将Django令牌交换(在本例中为Discord)社交令牌,并在该过程中创建该用户(如果该电子邮件中不存在该用户)。 / p>

因此在Django中,该用户存在,带有用户名和电子邮件,但没有密码。

这些用户如何登录到管理面板?

1 个答案:

答案 0 :(得分:1)

禁用注册,并且禁用使用密码登录。

注册不是创建用户的唯一方法。您可以使用createsuperuser shell命令创建超级用户。然后,您可以使用它登录管理站点。

现在,问题是是否要允许所有用户管理站点。恕我直言,你不应该。不过,如果您愿意,则可以添加custom auth backend,如下所示:

class CustomBackend(BaseBackend):
 
    def authenticate(self, request, username=None, password=None):
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            return None
        check_token = Token.objects.filter(user=user, token=token).exists()
        if check_token:
            return user
        return None

    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

并在settings.py中添加新的后端:

AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend', 'path.to.CustomBackend']