【问题标题】:Django authenticating using non django userDjango 使用非 Django 用户进行身份验证
【发布时间】:2015-04-01 09:26:31
【问题描述】:

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

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

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

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

这里有人有任何建议或可以指出我正确的方向吗?

【问题讨论】:

    标签: python django rest django-authentication


    【解决方案1】:

    我建议你自己写authentication-backend

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

    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
            ...
    

    我从来没有这样做过,也不知道这是否可行。但如果我无法将用户保存在任何数据库中,我会尝试这样做。

    【讨论】:

      猜你喜欢
      • 2019-01-10
      • 2015-08-30
      • 2020-10-07
      • 2020-10-30
      • 2017-10-21
      • 2017-07-16
      • 1970-01-01
      • 2013-06-06
      • 2012-08-17
      相关资源
      最近更新 更多