我跟随我的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发送到控制器,以便在登录成功后我可以重定向到同一页面。我该如何实现呢?
答案 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
。