1

请看下面的代码

应用程序.scala

def Online = Action { implicit request =>
loginForm.bindFromRequest.fold(
  formWithErrors => BadRequest(html.login(formWithErrors)),
  user => Contact.AddOnline("email" -> user._1)
)

其次是

trait Secured {

  /**
  * Retrieve the connected user email.
  */
  private def username(request: RequestHeader) =
   request.session.get("email")

  /**
  * Redirect to login if the user in not authorized.
  */
  private def onUnauthorized(request: RequestHeader) = 
  Home.flashing("failure"->"You    are not logged in");

 // --

   /** 
   * Action for authenticated users.
   */
  def IsAuthenticated(f: => String => Request[AnyContent] => Result)=
  Security.Authenticated(username, onUnauthorized) { user =>
  Action(request => f(user)(request))
  }

- 我的问题是我试图调用一段名为setOnline(user.email). 此代码仅在通过身份验证后将某个用户的状态设置为在线。在上面给出的代码中,我想调用我的setOnline(user.email)函数,但我不确定我应该在哪里或如何调用。在过去的 4 个小时里,我一直在尝试,但没有任何运气。主要问题是我不明白上面的代码是如何工作的(因为它不是我的代码)。

4

1 回答 1

1

这段代码......

def Online = Action { implicit request =>
loginForm.bindFromRequest.fold(
  formWithErrors => BadRequest(html.login(formWithErrors)),
  user => Contact.AddOnline("email" -> user._1)
)

是将请求绑定到名为 loginForm 的 Form 对象的操作。它将检查表单是否有错误,如果有,那么它将显示带有这些错误的表单。如果没有,那么它将调用 Contact.AddOnline。

和这个...

def IsAuthenticated(f: => String => Request[AnyContent] => Result) = 
    Security.Authenticated(username, onUnauthorized) { user =>Action(request => f(user)(request))


是一个将自己包裹在另一个动作(动作组合)周围的动作,以确定给定的用户名是否经过身份验证。如果它没有被授权,那么它会调用“onUnauthorized”函数,它会闪烁“你没有登录”。这实际上是行不通的。你应该像这样写你的“onUnauthorized”......

 private def onUnauthorized(request: RequestHeader) = 
  Redirect(routes.Home.url).flashing("You    are not logged in")
于 2012-11-06T20:54:39.333 回答