在 Social-App-Django 中扩展用户模型或自定义管道
Extend User Model or Custom Pipeline in Social-App-Django
我正在使用 django 1.11(不使用 Mongo)实现 social-app-django(不是已弃用的;依赖于 Python-social-auth 的那个)。我的应用程序将需要存储和操作大量用户数据,而不是在登录时从他们的社交媒体帐户中获取的数据。
当用户进行身份验证时,我不需要获取或收集任何额外数据,但他们在我的网站上执行的各种操作都需要保存到他们的用户模型中。我想知道以下哪种方法是首选(我在网上进行了广泛搜索,但找不到关于为什么使用一种方法与另一种方法的具体解释):
在我的应用 models.py(称之为 MyUser
)中创建我自己的用户模型,它不会扩展任何特殊内容,然后在身份验证管道中添加一个函数将 social-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
,还是只设置其中一个?
这两种方法本质上是不是达到了同样的目的?出于某种原因,还有一个 reliable/preferred 吗?或者,我应该两者都做吗?非常感谢您的帮助。
另一个细节:我希望不仅可以从我当前正在构建的应用程序访问用户数据库,还可以从我将来构建的其他应用程序(在同一个 Django 项目中)访问。这有什么影响吗?
因为我看到这个有相当多的观点,所以我将 post 我最终得出的解决方案。
django
和 social-app-django
(或任何其他社交身份验证模块)都使用默认的 User
模型进行身份验证。虽然可以编辑此模型以添加自定义参数,但我不推荐这样做。这不是很好的抽象或模块化。如果您在配置模型时出错,您不仅会破坏站点上的特定功能,而且还可能会破坏身份验证本身。
我能想到的你想要编辑默认用户模型本身的唯一情况是,如果你需要进行影响身份验证流程本身的更改(例如,添加你自己的自定义身份验证提供程序)。
创建一个名为 UserProfile
的新模型更容易也更安全,它与 User
对象具有所需的一对一关系。现在,您可以将 User
对象视为身份验证部分,将 UserProfile
对象视为 content/storage 部分。您不必经常弄乱 User
模型,并且 UserProfile
模型对于身份验证目的无关紧要。请注意,在此配置中,您不需要更改 settings.py 文件中的 AUTH_USER_MODEL
或 SOCIAL_AUTH_USER_MODEL
字段。
如果采用这种方法,您将需要在身份验证管道中添加一个自定义步骤,您可以在其中创建一个新的 UserProfile
对象并将其与当前正在登录的 User
相关联.
我正在使用 django 1.11(不使用 Mongo)实现 social-app-django(不是已弃用的;依赖于 Python-social-auth 的那个)。我的应用程序将需要存储和操作大量用户数据,而不是在登录时从他们的社交媒体帐户中获取的数据。
当用户进行身份验证时,我不需要获取或收集任何额外数据,但他们在我的网站上执行的各种操作都需要保存到他们的用户模型中。我想知道以下哪种方法是首选(我在网上进行了广泛搜索,但找不到关于为什么使用一种方法与另一种方法的具体解释):
在我的应用 models.py(称之为
MyUser
)中创建我自己的用户模型,它不会扩展任何特殊内容,然后在身份验证管道中添加一个函数将 social-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
,还是只设置其中一个?
这两种方法本质上是不是达到了同样的目的?出于某种原因,还有一个 reliable/preferred 吗?或者,我应该两者都做吗?非常感谢您的帮助。
另一个细节:我希望不仅可以从我当前正在构建的应用程序访问用户数据库,还可以从我将来构建的其他应用程序(在同一个 Django 项目中)访问。这有什么影响吗?
因为我看到这个有相当多的观点,所以我将 post 我最终得出的解决方案。
django
和 social-app-django
(或任何其他社交身份验证模块)都使用默认的 User
模型进行身份验证。虽然可以编辑此模型以添加自定义参数,但我不推荐这样做。这不是很好的抽象或模块化。如果您在配置模型时出错,您不仅会破坏站点上的特定功能,而且还可能会破坏身份验证本身。
我能想到的你想要编辑默认用户模型本身的唯一情况是,如果你需要进行影响身份验证流程本身的更改(例如,添加你自己的自定义身份验证提供程序)。
创建一个名为 UserProfile
的新模型更容易也更安全,它与 User
对象具有所需的一对一关系。现在,您可以将 User
对象视为身份验证部分,将 UserProfile
对象视为 content/storage 部分。您不必经常弄乱 User
模型,并且 UserProfile
模型对于身份验证目的无关紧要。请注意,在此配置中,您不需要更改 settings.py 文件中的 AUTH_USER_MODEL
或 SOCIAL_AUTH_USER_MODEL
字段。
如果采用这种方法,您将需要在身份验证管道中添加一个自定义步骤,您可以在其中创建一个新的 UserProfile
对象并将其与当前正在登录的 User
相关联.