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

标签 python django django-models python-social-auth django-socialauth

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

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

  • 在我的应用的 models.py 中创建我自己的用户模型(称为 MyUser),该模型不会扩展任何特殊内容,然后在身份验证管道中添加一个与社交关联的函数-app-django 用户具有相应的 MyUser 实例。保持 AUTH_USER_MODELSOCIAL_AUTH_USER_MODEL 不变。

    或者...

  • 在应用的 models.py 中创建我自己的用户模型,并在项目的 settings.py 中将 AUTH_USER_MODELSOCIAL_AUTH_USER_MODEL 设置为指向 MyUser 。保持管道不变。在这种情况下,我想知道是否有人可以澄清 MyUser 及其管理器应该扩展什么,以及我需要在modules.py中导入什么(我很困惑,因为很多堆栈溢出帖子都指的是该模块的已弃用版本,并且我不断收到错误)。另外,在这种情况下,我应该同时设置 AUTH_USER_MODEL SOCIAL_AUTH_USER_MODEL,还是只设置其中之一?

这两种方法本质上实现的是同一件事吗?出于某种原因,是否有一种更可靠/更受欢迎?或者,我应该两者都做吗?非常感谢您的帮助。

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

最佳答案

由于我看到这有相当多的浏览量,我将发布我最终找到的解决方案。

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

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

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

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

关于python - 在 Social-App-Django 中扩展用户模型或自定义管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45153041/

相关文章:

python绘图日期轴作为字符串而不是日期

python - 比较两个 csv 文件并获得差异

Python算法求一些数字的总和

django - 使用 Django 管理界面的 Node.js 应用程序

python - 安装枕头错误

django - 每个模型多个图像

python - `shutil.rmtree` 不适用于 `tempfile.TemporaryDirectory()`

python - 使用Django Rest Framework时如何将字段数据类型信息传递给前端?

python - 通过选择设置 Django IntegerField=...名称

python - Django : Change default value for an extended model class