【发布时间】:2016-07-05 16:16:23
【问题描述】:
我知道https://docs.djangoproject.com/en/1.9/topics/auth/customizing/ 这里有这个问题的文档,但是我需要澄清一下我的用例。
我基本上有一个我创建的 api。这个 api 所做的是将用户表单数据提交到外部 url,一旦提交,数据就会保存到外部 urls 数据库中。
然后我可以通过另一个 api 调用获取特定用户。用户作为对象返回。现在我正在尝试通过我的系统使用 django.contrib.auth 登录该用户,但我所拥有的不起作用。
这是我的过程:
A.我在我的 settings.py 文件中添加了一个自定义身份验证后端
AUTHENTICATION_BACKENDS =(
'new_app.backends.SettingsBackend',
'django.contrib.auth.backends.ModelBackend',
)
B.在我的 new_app 的后端文件中,我有以下代码:
class SettingsBackend(object):
def authenticate(self, username=None, password=None):
if username and password:
user = api.get_user()
#add pk to user object to satisfy django error warning
user.pk = user.unique_field
return user
return None
def get_user(self, user_id):
try:
if self.user.pk == user_id:
return self.user
except:
return None
在登录视图中,我正在尝试使用此登录用户:
def login_user(request, username, password):
from django.contrib import auth
if not username and password:
raise ValueError("Invalid username and password")
auth_user = auth.authenticate(username=username, password=password)
if auth_user is None:
raise ValueError("Invalid username and password")
auth.login(request, auth_user)
return auth_user
我收到错误消息:
'api.get_user()' object has no attribute 'save'
auth.login(request, auth_user) 行发生错误。
我认为原因是因为 django.contrib.auth 认为我的用户对象是 django 模型。所以,问题是我应该如何解决这个问题以使其在我的情况下发挥作用?谢谢你的时间。
【问题讨论】:
-
您在设置中说明了更改的用户模型吗?
-
@RA123 感谢您的回复。我没有,因为这不是典型的 django 用户模型,所以我认为这不是必需的。我觉得我很接近,但也许不需要使用 django.contrib.auth 并制作我自己的身份验证方法,但这就是我需要一些指导的地方。
-
如果你不使用django的用户模型,请先设置AUTH_USER_MODEL = 'user_custom.MyUser'
-
@RA123 谢谢,但这不起作用。这是从 api 调用获得的用户对象,我的应用程序模型文件中没有自定义用户模型。我什至没有使用模型文件,因为一切都来自外部数据库。我希望这是有道理的
-
您不能使用登录方法,因为它会在定义的任何用户数据库中查找用户 ID(如果没有则默认)以创建/继续会话。因此它需要一个用户模型类。
标签: python django authentication