【问题标题】:Get absolute URL in Play framework and Secure social在 Play 框架和安全社交中获取绝对 URL
【发布时间】:2014-09-09 18:30:22
【问题描述】:

我在 Play 项目中使用安全社交。我正在尝试使用我自己的电子邮件进行注册过程。

这里描述了如何做:

http://securesocial.ws/guide/views-customization.html

我的问题是,当我尝试在模板中生成绝对 URL 时出现错误:

@securesocial.controllers.routes.Registration.signUp(mailToken).absoluteURL(IdentityProvider.sslEnabled)

这里是错误日志:

[error] play - 无法调用该操作,最终出现错误: java.lang.Runt imeException:没有可用的 HTTP 上下文 这里。 [错误] 应用程序-

! @6j0al12dk - 内部服务器错误,用于 (POST) [/signup] ->

play.api.Application$$anon$1: 执行异常[[RuntimeException: 这里没有可用的 HTTP 上下文。]] 在 play.api.Application$class.handleError(Application.scala:293) ~[play_ 2.10.jar:2.2.3] 在 play.api.DefaultApplication.handleError(Application.scala:399) [play_ 2.10.jar:2.2.3] 在 play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun $applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.3]

    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun

$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.3]

    at scala.Option.map(Option.scala:145) [scala-library.jar:na]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrE

lse(PlayDefaultUpstreamHandler.scala:264) [play_2.10.jar:2.2.3] 引起 作者:java.lang.RuntimeException:没有可用的 HTTP 上下文 从这里。 在 play.mvc.Http$Context.current(Http.java:30) ~[play_2.10.jar:2.2.3] 在 play.mvc.Http$Context$Implicit.ctx(Http.java:196) ~[play_2.10.jar:2.2 .3] 在 play.core.j.PlayMagicForJava$.requestHeader(TemplateMagicForJava.scal a:56) ~[play-java_2.10.jar:2.2.3] 在views.html.custom.mails.signUpEmail$.apply(signUpEmail.template.scala :42) ~[类/:na] 在 plugins.NekViews.getSignUpEmail(NekViews.scala:100) ~[classes/:na] 在securesocial.core.providers.utils.Mailer$.sendSignUpEmail(Mailer.scal a:49) ~[securesocial_2.10-2.1.3.jar:2.1.3] [info] 应用程序- [securesocial] 卸载身份提供者:userpass [info] 应用程序 - [securesocial] 卸载密码哈希 bcrypt [info] 播放 - 关闭应用程序 默认的 Akka 系统。

有谁知道错在哪里?

【问题讨论】:

    标签: java http playframework-2.0 absolute-path securesocial


    【解决方案1】:

    您的模板需要隐式请求,这是获取绝对 URL 所必需的。

    @(/*template's parameters*/)(implicit request: RequestHeader)
    

    此请求必须在呈现模板的方法中可用。

    【讨论】:

      【解决方案2】:

      我有一个非常相似的错误,如果不一样的话,可能你也在你的项目中混合了一些 java 代码。

      您必须在控制器(在本例中为自定义视图控制器)中创建一个 java 上下文,以便视图使用它。

      例如:

      Scala 帮助器创建 java 上下文

      object JavaContext {
      
        import play.mvc.Http
        import play.core.j.JavaHelpers
      
        def withContext[Status](block: => Status)(implicit header: RequestHeader): Status = {
          try {
            Http.Context.current.set(JavaHelpers.createJavaContext(header))
            block
          }
          finally {
            Http.Context.current.remove()
          }
        }
      }
      

      用法:

      class CustomSecureSocialTemplates(env:RuntimeEnvironment[_]) extends ViewTemplates.Default(env:RuntimeEnvironment[_])
      {
      
        override def getLoginPage(form: Form[(String, String)],
                                  msg: Option[String] = None)(implicit request: RequestHeader, lang: Lang): Html = {
          JavaContext.withContext {
            views.html.security.login(form,msg)
          }
        }
      
      //...
      }
      

      来源:dominikdorn.com

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        相关资源
        最近更新 更多