Grails Grails oauth scribe linkedin重定向

Grails 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 2.0 Grails插件来使用LinkedIn资源。通过我的代码,我可以进入LinkedIn授权页面,在那里我可以授予我的应用程序访问我的LinkedIn帐户信息的权限

问题是,一旦我点击“继续”按钮,它就不会重定向回我的应用程序。相反,它会转到一个页面,上面写着“您已成功授权XXXX。请返回您的应用程序并输入以下安全代码以授予访问权限:某个号码”

如何将此重定向回我的应用程序

我的设置是:

Config.groovy

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
}