3

Grails用の新しいoAuth2.0プラグインを使用して、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"
            }
        }
    } 

私のgspビュー:

<oauth:connect provider="linkedin">Connect to linkedin</oauth:connect>

リンクされた開発者アカウント:

ウェブサイトのURL:http://localhost:8080/myApp OAuthリダイレクトURL:http://localhost:8080/myApp/secure/linkedinProfile/success

4

2 に答える 2

3

まあ、他の誰かがこれを必要とするなら、これが私がやったことです:

ビュー、開始コントローラー、終了コントローラーの 3 つのファイルがあります。

ビューには、次のようなリンクがあります。

  <g:link action="registerOnLinkedIn" controller="linkedinProfile" >connect </g:link>

私はこの方法を持っています:

        String apiKey =:myKey"
String apiSecret="mySecret"
String callBackUrl="http://localhost:8080/myApp/secure/mySub/success"

    def registerOnLinkedIn = {  

        Token linkedInAccessToken=null;
            OAuthService service=new ServiceBuilder()
            .provider(LinkedInApi.class)
            .apiKey(apiKey)
            .apiSecret(apiSecret)
            .callback(callBackUrl)
            .build();

            Token requestToken = service.getRequestToken();
            String authUrl = service.getAuthorizationUrl(requestToken);
            session['REQUEST_TOKEN'] = requestToken
            redirect(url: authUrl)
}
    def success ={
    String v = params.oauth_verifier
    String r=  session['REQUEST_TOKEN']

    linkedInXmlService.getXmlStream(v,session['REQUEST_TOKEN'])

}

ユーザーがリンクをクリックすると、そのメソッドに送信され、リダイレクト URL が作成されます。リダイレクト URL は、ユーザーがアプリを受け入れることができる、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)

}
于 2012-09-20T22:41:39.933 に答える
0

プラグインでこれを行う正しい方法は、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
}
于 2012-11-13T00:50:55.170 に答える