多个 django 会话表
Posted
技术标签:
【中文标题】多个 django 会话表【英文标题】:Multiple django session tables 【发布时间】:2021-12-23 21:33:18 【问题描述】:应用程序需要两个用户模型进行身份验证。第一个是 AUTH USER 模型,它有姓名、电子邮件和密码,另一个是 Account 模型,它与 AUTH USER MODEL 有外键关系。 PermissionsMixin 是由 account 模型继承的,所以所有的组和权限都与它相关,而不是与 AUTH USER 模型相关。
所有其他模型和视图都与 Accounts 模型相关联。
使用 AUTH USER 模型完成一次用户注册。但是登录应该在以下阶段发生。
-
使用电子邮件和密码的 AUTH USER 模型的会话身份验证将返回会话 cookie。 (比如说身份验证cookie)。此 cookie 的唯一目的是记住用户,直到他使用帐户模型登录,并且不能用于访问其他任何内容。
使用 auth cookie,用户从与他的 AUTH USER 条目关联的帐户表中获取帐户列表
用户将 account_id 与身份验证 cookie 一起发送。
后端为该用户帐户返回新的会话 cookie(例如帐户 cookie),并且用户将拥有与该帐户关联的所有权限。
问题:Django 会话框架仅针对 AUTH USER 模型进行身份验证,那么如何为帐户模型第二次创建帐户会话和 cookie?如何拥有多个会话表进行身份验证?
【问题讨论】:
【参考方案1】:为什么不能在当前会话中设置 cookie?我不太明白需要多个会话。
您还可以根据需要扩展数据库支持的会话: https://docs.djangoproject.com/en/dev/topics/http/sessions/#extending-database-backed-session-engines
看看那里给出的例子。
【讨论】:
因为会话 cookie 仅针对 AUTH USER 模型进行身份验证。我这里有两个模型,AUTH USER 模型和 Account 模型。针对 AUTH USER 模型的身份验证不足以访问所有视图。用户还必须针对 Account 模型进行身份验证。【参考方案2】:我同意之前的回答,我认为不需要多个会话,你有 2 个模型或 100 个模型。您已经拥有一个会话对象,并且可以检查几乎任何您希望对它进行的检查:选定的帐户、附加密码、年龄确认以及通过 mixins 或中间件限制访问。
【讨论】:
我还可以更改身份验证后返回的 request.user 属性吗?因为它必须根据帐户ID进行更改。 这不是您在原始帖子中描述的内容。答案可能是肯定的,但为什么呢?在我看来,您只想与 django 默认身份验证系统进行斗争,而不仅仅是根据您的需要进行调整。清除您试图实现的什么,而不是如何。 我尝试扩展会话模型并添加了一个新字段 account_id。身份验证后,如果 account_id 为 null,则返回 auth 用户对象,否则返回帐户对象。但由于 django 会话框架与 auth user 模型紧密耦合,因此 account 对象调用 request.user 失败,因为 django 期望它是 auth user 对象。 返回哪里和返回什么?当会话模型旨在存储任意信息时,需要扩展会话模型吗?回到 IRC 并正确解释您的案例。如果您不尝试为看似微不足道的问题找到最复杂的解决方案,那么很确定问题在一周前就已经解决了。以上是关于多个 django 会话表的主要内容,如果未能解决你的问题,请参考以下文章