我正在使用django 1.11(不使用Mongo)实现social-app-django(不是已弃用的;依赖于Python-social-auth的那个)。我的应用程序需要存储和操作用户的大量数据,而不是在登录时从社交媒体帐户中提取的数据。
当用户进行身份验证时,我不需要获取或收集任何额外数据,但是他们在我的网站上执行的各种操作都需要保存到他们的用户模型中。我想知道以下哪种方法更受欢迎(我在网上广泛搜索过,但找不到为何使用其中一种与另一种方法的具体解释):
在我的应用程序的models.py(称之为MyUser
)中创建我自己的用户模型,该模型不会扩展任何特殊内容,然后在认证管道中添加一个与社交应用程序关联的函数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项目中)。这会影响什么吗?
答案 0 :(得分:2)
因为我看到它有相当数量的观点,所以我将发布我最终找到的解决方案。
django
和social-app-django
(或任何其他社交身份验证模块)都使用默认的User
模型进行身份验证。虽然可以编辑此模型以添加自定义参数,但我不推荐它。它不是很好的抽象或模块化。如果在配置模型时出错,您不仅会破坏网站上的特定功能,还可能会破坏身份验证。
我想要编辑默认用户模型本身的唯一情况是,您是否需要进行影响身份验证流程的更改(例如,添加您自己的自定义身份验证提供程序) 强>
创建名为UserProfile
的新模型更加容易和安全,与User
对象具有必需的一对一关系。现在,您可以将User
对象视为身份验证部件,将UserProfile
对象视为内容/存储部件。您不必经常使用User
模型,UserProfile
模型对于身份验证无关紧要。请注意,在此配置中,您无需更改settings.py文件中的AUTH_USER_MODEL
或SOCIAL_AUTH_USER_MODEL
字段。
如果采用此方法,则需要在身份验证管道中添加自定义步骤,在该管道中创建新的UserProfile
对象并将其与当前登录的User
关联。 / p>