【发布时间】:2014-06-19 19:30:51
【问题描述】:
我有一个使用 securesocial 模块的 play 2 应用程序。在请求中有Identity 可用,但我需要我的用户对象(它扩展身份)传递给我的模板(因为用户包含一些额外的字段)所以对于每个控制器我有如下代码:
def index = SecuredAction { implicit request =>
implicit val currentUser = UsersDAO.Users.findByIdentityId(request.user.identityId).get
Ok(views.html.platform.support.index())
}
基本上,对于用户登录的每个控制器的方法,我都在向数据库发出请求,以获取当前登录的用户,我觉得这很丑陋。有什么方法可以让每个用户会话加载一次?
更新:
我添加了一个局部函数来让事情变得更简单
def loadCurrentUser(f: (User) => Result)(implicit request: SecuredRequest[play.api.mvc.AnyContent]): Result =
(for {
loggedInUser <- UsersDAO.Users.findByIdentityId(request.user.identityId)
} yield f(loggedInUser)).getOrElse(
Redirect(securesocial.controllers.routes.LoginPage.login))
现在来自控制器的每个方法都将是这样的:
def index = SecuredAction { implicit request =>
loadCurrentUser { implicit user =>
Ok(views.html.platform.support.index())
}
}
但我仍然希望用户在请求中或在他登录后以某种方式传递它的请求,而不是每次都从数据库加载它。
【问题讨论】:
标签: playframework-2.0 securesocial