【问题标题】:Current Request/User details in Models in Scala Play! 2.5Scala Play 模型中的当前请求/用户详细信息! 2.5
【发布时间】:2016-05-07 09:49:14
【问题描述】:

我想在我的 Play 应用模型深处访问当前用户,例如设置作者、检查用户是否可以实际保存此类型等。

理想情况下,我想使用 Guice 的 @RequestScoped 在我的请求中注入相同的 UserIdentity,无论我需要什么。但是,据我所知,Play!框架仅支持@Singleton 和无范围。因此,我们要么在请求中注入相同的UserIdentity,要么为我们请求的每个模型/实用程序注入不同的UserIdentity。出于显而易见的原因,两者都不可行。

有没有办法在 Play 2.5 中利用这种行为?

我尝试过的其他方法

我尝试过结合使用 Play 的会话和缓存。但我遇到的问题是会话是不可变的,所以我不能向它添加任何东西以在同一个请求中重用。

我查看了一堆身份验证框架,但它们似乎都专注于保护操作,而不是为我提供当前的用户对象。

【问题讨论】:

  • 你找到解决方案了吗?
  • @pme 我最终将我的 UserIdentity 类作为隐式验证发送。
  • 感谢您的回复 - 我是这么认为的或 Guice Assigned。我也试了一下,但还没有答案:stackoverflow.com/questions/51281807/…

标签: scala playframework guice playframework-2.5


【解决方案1】:

查看my answer to a question on redirecting requests,我在其中给出了在每个请求中获取当前用户的示例。

在这种情况下,授权密钥在登录时分发,客户端在此后的每个请求中传递它。

【讨论】:

  • 我的问题是我想要模型中的用户数据,而不是你的答案似乎暗示的控制器中的用户数据。
  • 为什么不将用户数据作为参数传递给您的模型?
  • @marcospereira 这个问题正是我们使用依赖注入的原因。每个级别的方法都必须向下传递标识,直到我们最终到达真正想要使用它的方法。这也意味着我必须在控制器中实例化它,我不一定想要这样做。理想情况下,我希望在需要时注入它。我最终可能会含蓄地传递它,但我认为这不是理想的或惯用的。
  • 这里没有魔法。如果您在调用链的某个深处需要当前用户,则需要在每次请求时获取它。根据您使用的身份验证方法,您的策略会发生变化。不可减少的是,它必须以某种方式注入,所以选择你喜欢的任何方法。
猜你喜欢
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 2016-12-07
  • 2016-10-30
相关资源
最近更新 更多