Django使用非django用户进行身份验证

时间:2015-04-01 09:26:31

标签: python django rest django-authentication

我必须编写一个Django应用程序/网站,它从第三方REST服务器获取所有数据。这意味着我实际上并没有使用任何默认的Django ORM模型,而是从REST请求中读取所有内容。这似乎工作正常,因为我能够在REST服务器上调用一些方法并获取对象列表,显示对象,更新,添加和删除对象......

但是现在我还需要用户登录Django站点/应用程序,因为只有注册和登录的用户才能看到数据。当然,用户也由第三方REST服务器处理,因此不是由Django ORM创建的。

REST API具有获取/创建用户的方法,并检查用户/密码组合是否有效。但我想知道如何在我的Django应用程序/网站中使用它。

我想我将无法使用request.user.is_authenticated这样的东西,因为这是远程REST API应该验证的东西。我已经阅读了一些关于REMOTE_USER的内容,但似乎无法找到关于如何设置RemoteUserBackend以满足我的需求的任何好例子。

此处有任何建议或能指出我正确方向的人吗?

1 个答案:

答案 0 :(得分:0)

我会写自己的authentication-backend

您可以获取凭据,通过REST进行身份验证,获取创建django Usermodel对象所需的信息并返回该信息。这将不会从您自己的数据库中保存或加载。它只是一个新创建的对象。

class MyBackend(object):
    def authenticate(self, username=None, password=None, token=None):
        if token:
            # token auth over rest
        elif username and password:
            # normal auth over rest
        else:
            return None

        # read django docs to User model
        from django.contrib.auth.models import User
        myUser = User()
        myUser.username = name_from_rest
        myUser.set_password(pw_from_rest)
        myUser.save()
        return myUser
        ...

我从未这样做过,也不知道这是否有效。但如果我无法将用户保存在任何数据库中,那就是我会尝试的方式。