在 Social-App-Django 中扩展用户模型或自定义管道

Extend User Model or Custom Pipeline in Social-App-Django

我正在使用 django 1.11(不使用 Mongo)实现 social-app-django(不是已弃用的;依赖于 Python-social-auth 的那个)。我的应用程序将需要存储和操作大量用户数据,而不是在登录时从他们的社交媒体帐户中获取的数据。

当用户进行身份验证时,我不需要获取或收集任何额外数据,但他们在我的网站上执行的各种操作都需要保存到他们的用户模型中。我想知道以下哪种方法是首选(我在网上进行了广泛搜索,但找不到关于为什么使用一种方法与另一种方法的具体解释):

这两种方法本质上是不是达到了同样的目的?出于某种原因,还有一个 reliable/preferred 吗?或者,我应该两者都做吗?非常感谢您的帮助。

另一个细节:我希望不仅可以从我当前正在构建的应用程序访问用户数据库,还可以从我将来构建的其他应用程序(在同一个 Django 项目中)访问。这有什么影响吗?

因为我看到这个有相当多的观点,所以我将 post 我最终得出的解决方案。

djangosocial-app-django(或任何其他社交身份验证模块)都使用默认的 User 模型进行身份验证。虽然可以编辑此模型以添加自定义参数,但我不推荐这样做。这不是很好的抽象或模块化。如果您在配置模型时出错,您不仅会破坏站点上的特定功能,而且还可能会破坏身份验证本身。

我能想到的你想要编辑默认用户模型本身的唯一情况是,如果你需要进行影响身份验证流程本身的更改(例如,添加你自己的自定义身份验证提供程序)。

创建一个名为 UserProfile 的新模型更容易也更安全,它与 User 对象具有所需的一对一关系。现在,您可以将 User 对象视为身份验证部分,将 UserProfile 对象视为 content/storage 部分。您不必经常弄乱 User 模型,并且 UserProfile 模型对于身份验证目的无关紧要。请注意,在此配置中,您不需要更改 settings.py 文件中的 AUTH_USER_MODELSOCIAL_AUTH_USER_MODEL 字段。

如果采用这种方法,您将需要在身份验证管道中添加一个自定义步骤,您可以在其中创建一个新的 UserProfile 对象并将其与当前正在登录的 User 相关联.