【问题标题】:Grails grails-oauth-scribe linkedin redirectGrails grails-oauth-scribelinkedin 重定向
【发布时间】:2012-09-08 14:57:06
【问题描述】:

我正在尝试使用 Grails 的新 oAuth 2.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>

我在开发者帐户中的链接:

网站网址:http://localhost:8080/myApp OAuth 重定向 URL:http://localhost:8080/myApp/secure/linkedinProfile/success

【问题讨论】:

    标签: grails grails-plugin scribe


    【解决方案1】:

    好吧,如果其他人需要这个,这就是我所做的:

    我有三个文件,视图、开始控制器和结束控制器。

    在视图上,我有一个这样的链接:

      <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 的授权页面,用户可以在其中接受应用程序。一旦被接受,它们就会被重定向到成功方法,该方法会重定向到服务。

    服务获取验证者和令牌并向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)
    
    }
    

    【讨论】:

      【解决方案2】:

      使用插件执行此操作的正确方法是在您的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 属性...我是新手,但无论如何它通过设置回调属性解决了您遇到的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多