如何使用 Scala 重定向播放框架中的请求?
How to redirect request in play framework with scala?
我正在使用 play framework 2.5。在我的应用程序中,我想拦截每个请求以检查该请求的会话中是否存在任何用户。如果用户不存在,则请求重定向到登录页面。所以,我的问题是如何在我的应用程序中实现它?
非常感谢您。
检查合适的用户后
Redirect(routes.Application.login())
我不会对您的身份验证策略做出任何假设,但他是一种简单的基于令牌的身份验证策略,当我想在每个请求中拦截用户时使用。
object UserAuthenticator extends Controller {
case class UserAuthenticatedRequest[A](user: User, authToken: String, request: Request[A]) extends WrappedRequest(request)
def userAuthenticated[A](p: BodyParser[A])(f: UserAuthenticatedRequest[A] => Result) = {
Action(p) { implicit request =>
request.headers.get(AUTHORIZATION).map(_.split(" ")) match {
case Some(Array(k, v)) if k == "auth-token" => findUserByAuthToken(v).map(user => f(UserAuthenticatedRequest(user, v, request))).getOrElse(Unauthorized)
case _ => Unauthorized
}
}
}
def userAuthenticated(f: UserAuthenticatedRequest[AnyContent] => Result): Action[AnyContent] = {
userAuthenticated(parse.anyContent)(f)
}
使用以上内容,我的控制器可以执行以下操作:
def myControllerMethod = userAuthenticated { request =>
doSomethingWith(request.user)
}
你会注意到在我的例子中我 return Unauthorized
,但你可以很容易地用你正在寻找的重定向替换它。
我正在使用 play framework 2.5。在我的应用程序中,我想拦截每个请求以检查该请求的会话中是否存在任何用户。如果用户不存在,则请求重定向到登录页面。所以,我的问题是如何在我的应用程序中实现它?
非常感谢您。
检查合适的用户后
Redirect(routes.Application.login())
我不会对您的身份验证策略做出任何假设,但他是一种简单的基于令牌的身份验证策略,当我想在每个请求中拦截用户时使用。
object UserAuthenticator extends Controller {
case class UserAuthenticatedRequest[A](user: User, authToken: String, request: Request[A]) extends WrappedRequest(request)
def userAuthenticated[A](p: BodyParser[A])(f: UserAuthenticatedRequest[A] => Result) = {
Action(p) { implicit request =>
request.headers.get(AUTHORIZATION).map(_.split(" ")) match {
case Some(Array(k, v)) if k == "auth-token" => findUserByAuthToken(v).map(user => f(UserAuthenticatedRequest(user, v, request))).getOrElse(Unauthorized)
case _ => Unauthorized
}
}
}
def userAuthenticated(f: UserAuthenticatedRequest[AnyContent] => Result): Action[AnyContent] = {
userAuthenticated(parse.anyContent)(f)
}
使用以上内容,我的控制器可以执行以下操作:
def myControllerMethod = userAuthenticated { request =>
doSomethingWith(request.user)
}
你会注意到在我的例子中我 return Unauthorized
,但你可以很容易地用你正在寻找的重定向替换它。