Grails Grails oauth scribe linkedin重定向
我正在尝试使用新的oAuth 2.0 Grails插件来使用LinkedIn资源。通过我的代码,我可以进入LinkedIn授权页面,在那里我可以授予我的应用程序访问我的LinkedIn帐户信息的权限 问题是,一旦我点击“继续”按钮,它就不会重定向回我的应用程序。相反,它会转到一个页面,上面写着“您已成功授权XXXX。请返回您的应用程序并输入以下安全代码以授予访问权限:某个号码” 如何将此重定向回我的应用程序 我的设置是: Config.groovyGrails Grails oauth scribe linkedin重定向,grails,grails-plugin,scribe,Grails,Grails Plugin,Scribe,我正在尝试使用新的oAuth 2.0 Grails插件来使用LinkedIn资源。通过我的代码,我可以进入LinkedIn授权页面,在那里我可以授予我的应用程序访问我的LinkedIn帐户信息的权限 问题是,一旦我点击“继续”按钮,它就不会重定向回我的应用程序。相反,它会转到一个页面,上面写着“您已成功授权XXXX。请返回您的应用程序并输入以下安全代码以授予访问权限:某个号码” 如何将此重定向回我的应用程序 我的设置是: Config.groovy oauth { provide
oauth {
providers{
linkedin {
api="org.scribe.builder.api.LinkedInApi"
key = 'my key'
secret = 'my secret'
successUri = '/linkedinProfile/success'
failureUri = '/linkedinProfile/failed'
callback = "http://localhost:8080/myApp/secure/linkedinProfile/success"
}
}
}
我的普惠制观点:
<oauth:connect provider="linkedin">Connect to linkedin</oauth:connect>
连接到linkedin
我的链接开发者帐户:
网站URL:http://localhost:8080/myApp
OAuth重定向URL:
http://localhost:8080/myApp/secure/linkedinProfile/success
好吧,如果其他人需要这个,下面是我所做的:
我有三个文件,视图、开始控制器和结束控制器
在视图中,我有这样一个链接:
<g:link action="registerOnLinkedIn" controller="linkedinProfile" >connect </g:link>
当用户单击链接时,它们将被发送到该方法,该方法将创建一个重定向url。重定向url是linkedIn的授权页面,用户可以在其中接受应用程序。一旦被接受,它们将被重定向到success方法,该方法将重定向到服务
该服务获取验证器和令牌,并向linkedin API发送请求。主要内容如下:
def apiUrl = "http://api.linkedin.com/v1/people/~:(" +
"id," +
"picture-url," +
"site-standard-profile-request," +
"first-name," +
"date-of-birth," +
"last-name," +
"industry," +
"location," +
"educations," +
"positions:(id,title,summary,start-date,end-date,is-current,company)," +
"skills:(id,skill:(name),proficiency:(level),years:(name))," +
"connections:(id,industry,first-name,last-name,site-standard-profile-request,headline,location,positions,educations,date-of-birth,picture-url,skills:(id,skill:(name),proficiency:(level),years:(name)))" +
")"
public void getXmlStream(String ver, rt)
{
String accessTokenKey=""
String accessTokenSecret=""
String xmlString =""
OAuthService service=new ServiceBuilder()
.provider(LinkedInApi.class)
.apiKey(apiKey)
.apiSecret(apiSecret)
.build();
Verifier v = new Verifier(ver);
Token accessToken = service.getAccessToken(rt, v);
accessTokenSecret = accessToken.secret
accessTokenKey = accessToken.token
OAuthRequest request = new OAuthRequest(Verb.GET, apiUrl);
service.signRequest(accessToken, request); // the access token from step 4
Response response = request.send();
xmlString=response.getBody();
log.debug (xmlString)
processData(xmlString, accessTokenKey, accessTokenSecret)
}
使用插件执行此操作的正确方法是在linkedin配置中指定回调属性 我还在学习这个,所以我的配置中的其他东西可能是错误的。但是,回调参数解决了这个问题
oauth {
providers {
linkedin {
api = org.scribe.builder.api.LinkedInApi
key = 'XXX'
secret = 'XXX'
successUri = "/oauth/linkedin/callback"
failureUri = "/oauth/linkedin/error"
callback = "https://localhost:8443/myapp/oauth/linkedin/callback"
scope = "w_messages"
}
}
debug = true
}
具体来说,我认为我没有正确设置successUri和failureUri属性。。。我是新手,但不管怎样,它通过设置回调属性解决了您遇到的问题。
oauth {
providers {
linkedin {
api = org.scribe.builder.api.LinkedInApi
key = 'XXX'
secret = 'XXX'
successUri = "/oauth/linkedin/callback"
failureUri = "/oauth/linkedin/error"
callback = "https://localhost:8443/myapp/oauth/linkedin/callback"
scope = "w_messages"
}
}
debug = true
}