我正在实现social-app-django (不是已弃用的;依赖于 Python-social-auth 的)与 django 1.11(不使用 Mongo)。我的应用程序需要存储和操作大量用户数据,而不是登录时从其社交媒体帐户获取的数据。
当用户进行身份验证时,我不需要获取或收集任何额外的数据,但他们在我的网站上执行的各种操作需要保存到他们的用户模型中。我想知道以下哪种方法是首选(我在网上进行了大量搜索,但找不到为什么使用一种方法与另一种方法的具体解释):
在我的应用的 models.py 中创建我自己的用户模型(称为
MyUser
),该模型不会扩展任何特殊内容,然后在身份验证管道中添加一个与社交关联的函数-app-django 用户具有相应的MyUser
实例。保持AUTH_USER_MODEL
和SOCIAL_AUTH_USER_MODEL
不变。或者...
在应用的 models.py 中创建我自己的用户模型,并在项目的 settings.py 中将
AUTH_USER_MODEL
和SOCIAL_AUTH_USER_MODEL
设置为指向MyUser
。保持管道不变。在这种情况下,我想知道是否有人可以澄清MyUser
及其管理器应该扩展什么,以及我需要在modules.py中导入什么(我很困惑,因为很多堆栈溢出帖子都指的是该模块的已弃用版本,并且我不断收到错误)。另外,在这种情况下,我应该同时设置AUTH_USER_MODEL
和SOCIAL_AUTH_USER_MODEL
,还是只设置其中之一?
这两种方法本质上实现的是同一件事吗?出于某种原因,是否有一种更可靠/更受欢迎?或者,我应该两者都做吗?非常感谢您的帮助。
另一个细节:我希望不仅能够从我当前正在构建的应用程序访问用户数据库,而且还能够从我将来构建的其他应用程序(在同一 Django 项目内)访问用户数据库。这会影响什么吗?
最佳答案
由于我看到这有相当多的浏览量,我将发布我最终找到的解决方案。
django
和 social-app-django
(或任何其他社交身份验证模块)都使用默认的 User
模型进行身份验证。虽然可以编辑此模型以添加自定义参数,但我不建议这样做。这不是很好的抽象或模块化。如果您在配置模型时犯了错误,您不仅会破坏网站上的特定功能,而且还可能破坏身份验证本身。
我能想到的唯一需要编辑默认用户模型本身的情况是,如果您需要进行影响身份验证流程本身的更改(例如,添加您自己的自定义身份验证提供程序) .
创建一个名为 UserProfile
的新模型要容易得多,也更安全,它具有与 User
对象所需的一对一关系。现在,您可以将 User
对象视为身份验证部分,将 UserProfile
对象视为内容/存储部分。您不必经常弄乱 User
模型,并且 UserProfile
模型对于身份验证目的并不重要。请注意,在此配置中,您不需要更改 settings.py 文件中的 AUTH_USER_MODEL
或 SOCIAL_AUTH_USER_MODEL
字段。
如果您采用这种方法,您将需要在身份验证管道中添加一个自定义步骤,在其中创建一个新的 UserProfile
对象并将其与谁的 User
关联起来。当前正在登录。
关于python - 在 Social-App-Django 中扩展用户模型或自定义管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45153041/