Grails:通过oauth标记将params传递给控制器​​时出错

时间:2014-01-29 17:56:06

标签: grails oauth scribe

我跟随我的gsp:

<oauth:connect provider="facebook" params="[currentURL: location.protocol + '//'
            + location.host + location.pathname]">
    <img src="../images/socialSites/facebook.png" alt="facebook" />
</oauth:connect>

跟随控制器中的代码:

 def currentURL = params.currentURL
 println "currentURL is :"+currentURL;

并且未显示此错误和页面:

Caused by: java.lang.NullPointerException: Cannot get property 'protocol' on null object

我读到here oauth可以接受g:link可以接受的所有参数,因此尝试将当前url发送到控制器,以便在登录成功后我可以重定向到同一页面。我该如何实现呢?

2 个答案:

答案 0 :(得分:1)

location.protocol / location.host / location.pathname /等。可以在JavaScript中工作,但在params映射中只支持Groovy,并且该代码无法访问客户端状态。使用

params="[currentURL: request.scheme + '://' + request.serverName + ':' + request.serverPort + request.forwardURI]"

代替。

答案 1 :(得分:0)

您无法将params添加到connect的{​​{1}}标签中,因为它没有将oauth taglib添加到params

要实现您的要求,请创建自定义标记以进行身份​​验证:

URL

并在你的gsp中使用它:

class MyOauthTagLib {

  static namespace = 'o'

  def connect = { attrs, body ->
    String provider = attrs.provider
    Map params = attrs.remove('params')

    if (!provider) {
        throw new GrailsTagException('No provider specified for <o:connect /> tag. Try <o:connect provider="your-provider-name" />')
    }

    Map a = attrs + [url: [controller: 'oauth', action: 'authenticate', params: [provider: provider] + params]]
    out << g.link(a, body)
  }
}

注意: - 按照<o:connect provider="facebook" params="[currentURL: request.scheme + '://' + request.serverName + ':' + request.serverPort + request.forwardURI]">facebook</o:connect> 的建议使用request。您无法在此处访问@Burt Beckwith