【问题标题】:Access Django Admin with token instead of password使用令牌而不是密码访问 Django Admin
【发布时间】:2021-01-13 16:51:46
【问题描述】:

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

所以在 Django 中,用户存在,有用户名和电子邮件,但没有密码。

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

【问题讨论】:

    标签: django


    【解决方案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']
    

    【讨论】:

    • 用户的 is_staff 和 is_superuser 由他们在 discord 服务器中的角色填充,因此在这种情况下他们可以访问管理面板。只要我将令牌对象过滤器设置为token=password,这就行得通,允许他们将令牌输入到密码字段中。
    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2018-04-17
    • 2015-12-18
    • 1970-01-01
    • 2023-02-02
    • 2017-08-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多