Ruby on rails LinkedIn API Ruby/OAuth2集成

Ruby on rails LinkedIn API Ruby/OAuth2集成,ruby-on-rails,ruby,api,oauth-2.0,linkedin,Ruby On Rails,Ruby,Api,Oauth 2.0,Linkedin,我正试图使用OAuth2为我的Rails应用程序编写一个与LinkedIn API的集成,但我很难弄清楚如何进行经过身份验证的API调用。我似乎找不到任何不依赖linkedin gem的主题资源。我已经在我的应用程序中安装了这个gem,但是需要进行一些不可能使用这个gem的API调用 我想做的是设置一个控制器,其中包含一些端点,我的Angular客户端可以ping这些端点。当客户端ping控制器时,它应该反过来ping LinkedIn API。一旦得到响应,它将执行一些操作,将信息存储在数据库

我正试图使用
OAuth2
为我的Rails应用程序编写一个与LinkedIn API的集成,但我很难弄清楚如何进行经过身份验证的API调用。我似乎找不到任何不依赖linkedin gem的主题资源。我已经在我的应用程序中安装了这个gem,但是需要进行一些不可能使用这个gem的API调用

我想做的是设置一个控制器,其中包含一些端点,我的Angular客户端可以ping这些端点。当客户端ping控制器时,它应该反过来ping LinkedIn API。一旦得到响应,它将执行一些操作,将信息存储在数据库中,然后将其传递给Angular客户端

我在LinkedIn的Ruby中找到了一个,我正试图将其修改为我的应用程序的控制器。这是我的控制器:

class Employers::LinkedinApiController < ApplicationController
    require 'net/http'
    layout 'employers/layouts/application'
    before_action :authorize_viewer
    skip_after_filter :intercom_rails_auto_include

    REDIRECT_URI = 'http://app.mysite.local:3000/linkedin/callback'
    STATE = SecureRandom.hex(15)
    CLIENT = parameterize(client.auth_code.get_token(STATE, redirect_uri: REDIRECT_URI))

    def get_update(update_key=nil)
        company = current_employer.company
        update_key = company.social_media_posts.where("linkedin IS true AND linkedin_id IS NOT NULL").last.linkedin_id
        page_id = company.linkedin.page_id
        end_point = "https://api.linkedin.com/v1/companies/#{page_id}/updates/key=#{update_key}?format=json"

        access_token = OAuth2::AccessToken.new(client, CLIENT['token'], {
            :mode => :header,
            :header_format => 'Bearer %s'
        })

        response = access_token.get(end_point)

        # Do something with the response to save it to the database

        # Pass response on to Angular client
        respond_to do
            format.json { render json: response }
        end
    end

    private

    #Instantiate your OAuth2 client object
    def client
        OAuth2::Client.new(
            ENV['LINKEDIN_APP_ID'], 
            ENV['LINKEDIN_APP_SECRET'], 
            authorize_url: "/uas/oauth2/authorization?response_type=code",
            token_url: "/uas/oauth2/accessToken",
            site: "https://www.linkedin.com"
        )
    end

    def parameterize(string)
        parameters = {}
        string.split('?')[-1].split('&').each do |param|
            parameters[param.split('=')[0]] = param.split('=')[-1]
        end
        parameters
    end

    def authorize_viewer
        if !employer_signed_in?
            redirect_to new_employer_session_path
        end
    end
end
类雇主::LinkedInApicController:标题,
:header_format=>“承载%s”
})
response=access\u token.get(端点)
#对响应执行一些操作以将其保存到数据库
#将响应传递给Angular客户端
回应
format.json{render json:response}
结束
结束
私有的
#实例化OAuth2客户机对象
def客户端
OAuth2::Client.new(
ENV['LINKEDIN应用程序ID'],
ENV['LINKEDIN\u应用程序\u机密'],
授权url:“/uas/oauth2/authorization?响应类型=代码”,
令牌\u url:“/uas/oauth2/accessToken”,
地点:“https://www.linkedin.com"
)
结束
def参数化(字符串)
参数={}
string.split('?')[-1].split('&')。每个do |参数|
参数[参数拆分('=')[0]]=参数拆分('=')[-1]
结束
参数
结束
def授权U查看器
如果!雇主签字?
重定向到新的雇主会话路径
结束
结束
结束
在LinkedIn的代码示例中,从
accept
方法获取数据的唯一方法是ping
authorize
方法,其回调指向
accept
方法。我不明白的是,如何在控制器中ping
get\u update
方法并进行身份验证API调用,而不必设置一个
authorize
方法来调用
get\u update

我该怎么做