【问题标题】:Decouple user information and authentication information in SymfonySymfony 中的用户信息和认证信息解耦
【发布时间】:2017-04-14 15:18:47
【问题描述】:

首先,我是 Symfony 的新手,所以我不知道 FOSUserBundle 等包的确切功能以及术语。


我正在寻找一种使用 Symfony 安全组件的方法,使我能够将用户的登录凭据(例如,登录名和密码,可能是角色)与实际的用户元数据(例如第一个姓名、姓氏、团体、出生日期等)。

这个想法是用户可以使用不同的登录名/密码集登录,并且仍然被识别为同一用户(最终这意味着,获得相同的User 对象)。

对我来说,这在与多个身份验证提供程序结合使用时特别方便。例如,如果我想让我的用户通过 OAuth2 服务登录作为替代,而不是使用本地托管的登录名/密码组合登录(例如 StackExchange 所做的),如何我会这样做吗?


我已经阅读了多页 Symfony 的文档,例如:

后者甚至在1) Create your User Entity 中说passwordUser 的一个字段。

【问题讨论】:

  • 创建 2 个模型,例如 UserUserCredentials,具有一对多的关系。使用User 保存您的元数据,使用UserCredentials 进行身份验证。
  • 这实际上是我在移植到 Symfony 之前所做的。我在这里看到的问题是Controller::getUser() 会返回一个UserCredentials 的实例,这可能会导致混淆,因为函数名称是getUser

标签: php symfony authentication


【解决方案1】:

我最近创建了这个,首先我将我的类命名为 UserCredentials 和 UserDitails,由于 getUser 函数的混淆,我决定将 UserCredentials 重命名为 User。我同意 Alex Blex 关于这种关系的看法(用户方面的 manyToOne)。当您将登录名和元数据分离时,您将需要学习如何嵌入表单或创建自己的表单模型,这是我目前正在做的事情,您可能需要实现用于删除和更新实体的回调函数。我在 UserBundle 上工作的越多,它看起来就越像 FOSUserBundle。设计它以使其正常工作需要做很多工作,但它非常适合学习。如果你想检查 FOSUserBundle 是如何工作的,在你安装它之后,你可以在 vendor/friendsOfSymfony 文件夹中找到它,它可能会提供一些答案。

【讨论】:

  • 我可能会这样做,尽管我希望有更清洁的解决方案。您是否建议将我的业务逻辑外包到一个专用包中?
  • 是的,当然,没有必要走得太远,如果某些东西没有显示出一种优雅的方式来与其他东西分开并且更简单地捆绑在一起就可以了。使用用户帐户,一目了然
猜你喜欢
  • 1970-01-01
  • 2011-12-19
  • 2016-05-10
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多