目标是为该网络应用设置一个Google(YouTube)帐户。该网络应用的用户将能够通过此帐户将视频上传到一个YouTube频道。经过几个小时我到底。我已经找到了大量示例如何为Google用户实现< - >网络应用互动,但我不需要这样全面的解决方案。
我正在尝试使用OAuth 2.0(推荐)和Google API Ruby客户端(https://github.com/google/google-api-ruby-client)
到目前为止,我已经授权Google帐户(将拥有该YouTube频道)与网络应用,包括所有必要的范围,离线访问以及我有刷新访问令牌的机制。所以我有访问令牌,刷新令牌,客户端ID和客户端密码。
但我不知道如何发送简单的授权请求。下面的结果返回“超出未经验证的使用的每日限制”。一段时间后出现问题 - 我想我错过了客户端ID和客户端密码的部分。
所以问题是:当我们只与一个用户合作并且我们拥有所有必需的ID,秘密和令牌时,如何通过OAuth 2.0向Google API Ruby客户端发送简单的授权请求?
感谢您提供任何帮助或建议。
# Faraday connection
conn = Faraday.new(:url => 'https://accounts.google.com',:ssl => {:verify => false}) do |faraday|
faraday.request :url_encoded
faraday.response :logger
faraday.adapter Faraday.default_adapter
end
# Refresh token
result = conn.post '/o/oauth2/token', {
'refresh_token' => "1/1lDIvifN******************dk9Akuc9ELVKM0",
'client_id' => "61********506.apps.googleusercontent.com",
'client_secret' => "********************g_dLfKmi",
'grant_type' => 'refresh_token'}
@output = ActiveSupport::JSON.decode result.body
@access_token = @output['access_token']
@token_type = @output['token_type']
# Google Client
client = Google::APIClient.new
# YouTube API v3
api = client.discovered_api('youtube', 'v3')
# Retrieve list of playlists (not working)
@result = client.execute(
:api_method => api.playlists.list,
:parameters => {'part' => 'snippet', 'mine' => 'true'},
:authorization => {'token_type' => @token_type, 'access_token' => @access_token}
)
答案 0 :(得分:0)
好的,所以我虽然执行请求中的:authorization param会添加HTTP头Authorization:token_type access_token本身,但不是,这是一个问题。
这样可行:
@result = client.execute(
:api_method => api.playlists.list,
:parameters => {'part' => 'snippet', 'mine' => 'true'},
:authorization => {:token_type => @token_type, :access_token => @access_token},
:headers => {:authorization => @token_type + ' ' + @access_token}
)