Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http Play Framework-如何重定向到插件控制器生成的页面?[安全社交]_Http_Scala_Playframework 2.0_Url Routing_Securesocial - Fatal编程技术网

Http Play Framework-如何重定向到插件控制器生成的页面?[安全社交]

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

我的routes.conf文件中有:

# 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])