Http Play Framework-如何重定向到插件控制器生成的页面?[安全社交]
我的routes.conf文件中有:Http Play Framework-如何重定向到插件控制器生成的页面?[安全社交],http,scala,playframework-2.0,url-routing,securesocial,Http,Scala,Playframework 2.0,Url Routing,Securesocial,我的routes.conf文件中有: # SecureSocial routes # Login page GET /login securesocial.controllers.LoginPage.login 然后我把它放在Scala控制器文件中 val index = SecuredAction { implicit request => Redirect(routes.UserOps.watchlist) // h
# SecureSocial routes
# Login page
GET /login securesocial.controllers.LoginPage.login
然后我把它放在Scala控制器文件中
val index = SecuredAction { implicit request =>
Redirect(routes.UserOps.watchlist)
// how do I go straight to /login? >|
}
这样做会让我进入一个登录页面,页面上有一个红色的错误条,上面写着“您必须登录才能查看此页面”。如果我访问'localhost:9000/login',我将获得没有错误栏的登录页面
通常我会执行重定向(routes.SomeControllerObject.ActionMethodName)
,但在这种情况下,我需要访问的控制器位于插件中
我觉得我在这里遗漏了一些非常大的东西…为了显示信息,您必须在Flash中有一个项目。当您直接点击/登录时,没有flash,因此您不会看到该消息 如果要查看该消息,请执行以下操作:
重定向(securesocial.controllers.LoginPage.login)。闪烁(…)
为了显示消息,您必须在闪烁中有一个项目。当您直接点击/登录时,没有flash,因此您不会看到该消息
如果要查看该消息,请执行以下操作:
重定向(securesocial.controllers.LoginPage.login)。闪烁(…)
更新:
要反向路由到插件控制器中的操作,您需要提供插件的路由
类的正确完整路径
Redirect(securesocial.controllers.routes.LoginPage.login)
原始答案
对于反向路由,我认为控制器在哪里并不重要,因为在项目编译时,Play正在构建该控制器。从文件中:
对于routes文件中使用的每个控制器,路由器将在routes
包中生成一个“反向控制器”,具有相同的操作方法,具有相同的签名,但返回一个play.api.mvc.Call
而不是play.api.mvc.action
因此,这应该像LoginPage
是应用程序中的直接控制器一样工作
Redirect(routes.LoginPage.login);
更新:
要反向路由到插件控制器中的操作,您需要提供插件的路由
类的正确完整路径
Redirect(securesocial.controllers.routes.LoginPage.login)
原始答案
对于反向路由,我认为控制器在哪里并不重要,因为在项目编译时,Play正在构建该控制器。从文件中:
对于routes文件中使用的每个控制器,路由器将在routes
包中生成一个“反向控制器”,具有相同的操作方法,具有相同的签名,但返回一个play.api.mvc.Call
而不是play.api.mvc.action
因此,这应该像LoginPage
是应用程序中的直接控制器一样工作
Redirect(routes.LoginPage.login);
没有。。。我得到一个编译错误:value-LoginPage不是对象控制器的成员。routes
我以为它把所有这些都放在了一起,但我猜不是。然后试着给它完整的路径<代码>重定向(securesocial.controllers.routes.LoginPage.login)
Hm!没有更多的编译错误。我仍然收到“你必须登录才能查看该页面”的错误条,所以。。。在没有红色提示的情况下显示登录页面的唯一方法是直接转到localhost:9000/login
。我想我需要在我的操作中执行某种类型的GET/login
http请求才能实现这一点。好吧,我不知道你当时在问什么。你想从哪里重定向?如果您在最初发布的SecuredAction
代码中,并且您没有登录,那么我认为它将始终显示消息。。。插件就是这么做的。我不明白这个问题。为什么要从SecuredAction重定向到登录页面?如果用户未经身份验证,SecuredAction将为您执行此操作。不。。。我得到一个编译错误:value-LoginPage不是对象控制器的成员。routes
我以为它把所有这些都放在了一起,但我猜不是。然后试着给它完整的路径<代码>重定向(securesocial.controllers.routes.LoginPage.login)
Hm!没有更多的编译错误。我仍然收到“你必须登录才能查看该页面”的错误条,所以。。。在没有红色提示的情况下显示登录页面的唯一方法是直接转到localhost:9000/login
。我想我需要在我的操作中执行某种类型的GET/login
http请求才能实现这一点。好吧,我不知道你当时在问什么。你想从哪里重定向?如果您在最初发布的SecuredAction
代码中,并且您没有登录,那么我认为它将始终显示消息。。。插件就是这么做的。我不明白这个问题。为什么要从SecuredAction重定向到登录页面?如果用户未经身份验证,SecuredAction将为您执行此操作。我收到一个编译错误<代码>重载方法值[Redirect]无法应用于(play.api.mvc.Action[play.api.mvc.AnyContent])我收到一个编译错误<代码>重载方法值[Redirect]无法应用于(play.api.mvc.Action[play.api.mvc.AnyContent])