ruby-on-rails – 无法获得Google AnalyticsAPI的oAuth2访问令牌
我正在使用Rails Garb Gem(Sija Branch)omniauth-google-oauth2 Gem,我可以成功通过Google AnalyticsAPI进行身份验证并提取我们的应用在使用用户登录时生成的数据,例如:
Garb::Session.login('USERNAME','<PASSWORD>') 然后我可以使用Garb连接到我想要的Analytics Profile并从中提取数据并在网页上显示一些图表.一切正常. 但是,我想使用oAuth2对Analytics进行身份验证,这就是为什么我必须从Github安装Garb Gem的Sija分支(它支持oAuth2),我还安装了omniauth-google-oauth2 Gem.现在理论上我应该能够使用以下代码进行身份验证: Garb::Session.access_token = access_token # an instance of OAuth2::Client 在这一点上,它对我来说有点模糊,我非常感谢一些指导.这是我有多远: 1)我在Google API控制台中创建了一个项目,并启用了服务下的Analytics API 2)这为我提供了客户端ID和客户端密钥 3)我遇到了这个代码,我可以用上面的ID和Secret填充: client = OAuth2::Client.new( GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET,{ :site => 'https://accounts.google.com',:authorize_url => '/o/oauth2/auth',:token_url => '/o/oauth2/token' }) 4)然后是下一段代码: response = OAuth2::AccessToken.new( client,STORED_TOKEN,{ refresh_token: STORED_REFRESH_TOKEN,expires_at: STORED_EXPIRES_AT }) 5)然后在理论上连接: Garb::Session.access_token = response 我遇到的问题是我没有上面第(4)点中的令牌信息.在我看来,使用oAuth2我需要进行一次“握手”并打印出返回令牌值?也许通过Rails代码打印返回的值,然后将令牌值粘贴到Rails应用程序中的常量中,以便我可以在上面的代码中使用它们?我真的很困惑.正如我之前提到的,使用用户登录身份验证,Web应用程序正常工作.所有Web应用程序正在进行的是使用分析进行身份验证,下拉一些数据并绘制图表.但是由于我不知道如何获得Garb Gem正在寻找的访问令牌,所以我无法将其转换为oAuth2.我还应该注意,这不是一个有多个用户身份验证的公共网站,这是一个连接到我们自己的Google Analytics数据的CMS网站. 我已经看到了一些方面的部分片段,但没有完全解释或工作的例子.我真的很感激任何指导和帮助这个问题. 提前谢谢了, JR 解决方法
在过去的几周里,我已经通过这种方式进行了销售,所以让我分享一下有效的方法:
要使用Oauth2,您需要获得一个“刷新令牌”,您每次进行API调用时都会使用谷歌“重新验证”.其步骤如下: 1)在API控制台中设置您的帐户 – https://code.google.com/apis/console/b/0/(看起来您做得很好) http://some-url.com/auth/google_oauth2/callback http://localhost:3000/auth/google_oauth2/callback 请注意,Google不会让您以0.0.0.0:3000的形式回拨本地计算机…因此您需要明确使用localhost 3)在您的路由文件中,将重定向url绑定到您要创建项目或身份验证的控制器中的操作 match '/auth/:provider/callback' => 'authentications#create' ‘:provider’只是让你匹配多种类型的oauth,但你也可以将’google_oauth2’放在那里. 4)现在在控制器中创建该动作 def create auth = request.env["omniauth.auth"] params = request.env["omniauth.params"] project = Project.find(params['project_id']) Authentication.create(:project_id => project.id,:provider => auth['provider'],:uid => auth['uid'],:access_token => auth['credentials']['refresh_token']) flash[:notice] = "Authentication successful." redirect_to owner_view_project_path(project) end 5)控制器操作应该从响应对象中检索相关字段(响应对象的详细信息在这里:https://github.com/zquestz/omniauth-google-oauth2) – 特别是,您需要获取’refresh_token’并将其保存到您的项目或身份验证对象 – 如果您还没有向所需对象添加了“access_token”属性,现在通过迁移执行此操作,然后开始将刷新令牌保存到该属性 6)现在,当您准备调用该特定身份验证并获取其API数据时,您可以加载保存访问令牌的对象,并使用该对象获取与Google API的新会话,如下所示: @authentication = Authentications.find(params[:id]) client = OAuth2::Client.new GOOGLE_CLIENT_ID,{ :site => 'https://accounts.google.com',:authorize_url => "/o/oauth2/auth",:token_url => "/o/oauth2/token",} response = OAuth2::AccessToken.from_hash(client,:refresh_token => @authentication.access_token).refresh! Garb::Session.access_token = response @profiles = Garb::Management::Profile.all 这段代码的作用是创建一个OAuth2访问令牌(响应),方法是指定客户端,然后指定refresh_token,然后调用’refresh!’获取刷新的访问令牌…然后使用该访问令牌建立您的Garb会话,然后使用Gard :: Management :: Profile.all调用给定帐户的所有配置文件 希望这会有所帮助 – 如果您有任何疑问请与我联系! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |