如何扩展Play2 scala zentasks身份验证以自动获取用户

Leo*_*ley 1 scala playframework playframework-2.0

在Play2的zentasks示例中,我们有了方法

def isAuthenticated(f: => String => Request[AnyContent] => Result) = {
  Security.Authenticated(username, onUnauthorized) { user =>
    Action(request => f(user)(request))
  }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是添加另一种方法,如果我想直接从数据库中获取用户,我可以使用它.

在所有方法中添加包装器会有点无聊

def method() = isAuthenticated { username => implicit request =>
  UserDAO.findOneByEmail(username).map { user =>
    Ok(html.user.view(user))
  }.getOrElse(Forbidden)
}
Run Code Online (Sandbox Code Playgroud)

我是函数式编程的新手,所有这些=>让我头晕目眩:)

有什么建议?

Jul*_*Foy 5

您可以定义另一个方法,例如IsAuthenticatedUser,它将采用类型的参数User => Request[AnyContent] => Result:

def IsAuthenticatedUser(f: User => Request[AnyContent] => Result) = IsAuthenticated { email => request =>
  UserDAO.findOneByEmail(email).map { user =>
    f(user)(request)
  }.getOrElse(Forbidden)
}
Run Code Online (Sandbox Code Playgroud)

然后您可以像下面这样使用它:

def method = IsAuthenticatedUser { user => request =>
  Ok(html.user.view(user))
}
Run Code Online (Sandbox Code Playgroud)