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
方法获取数据的唯一方法是pingauthorize
方法,其回调指向accept
方法。我不明白的是,如何在控制器中pingget\u update
方法并进行身份验证API调用,而不必设置一个authorize
方法来调用get\u update
我该怎么做