多个 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 会话表的主要内容,如果未能解决你的问题,请参考以下文章

Django组件——cookie与session

Django之cookie与session

Django-09 cookie和session

Django组件-cookie与session

Django组件-cookie与session

Django之cookie and session