Rails服务+ oauth代码结构

我无法将OAuth集成的逻辑构建到我的Web应用程序中。 在应用中,用户创建一个报告,其中包含来自其Google Analytics(分析)帐户的数据。

用户步骤:

  1. 用户点击“新报告”
  2. Google为OAuth访问提供了“允许访问”页面
  3. 向用户显示其GA网站属性列表并选择一个
  4. 使用所选Web属性中的数据创建报告

我的问题在于构建下面的代码。

当用户点击“新报告”时,他们实际上会重定向到google_analytics#ga_session以开始授权过程。 检索用户的Web属性的代码成功,但底部的代码需要重构,以便在检索Web属性数据时可重用。 我无法弄清楚的两个主要问题是如何使GoogleAnalytics实例可重用以及如何构建oauth重定向。

检索网络媒体资源:

GoogleAnalyticsController

 def ga_session client = OAuth2::Client.new(ENV['GA_CLIENT_ID'], ENV['GA_SECRET_KEY'], { :authorize_url => 'https://accounts.google.com/o/oauth2/auth', :token_url => 'https://accounts.google.com/o/oauth2/token' }) redirect_to client.auth_code.authorize_url({ :scope => 'https://www.googleapis.com/auth/analytics.readonly', :redirect_uri => ENV['GA_OAUTH_REDIRECT_URL'], :access_type => 'offline' }) end def oauth_callback session[:oauth_code] = params[:code] redirect_to new_report_path end 

ReportsController

 def new @report = Report.new ga_obj = GoogleAnalytics.new ga_obj.initialize_ga_session(session[:oauth_code]) @ga_web_properties = ga_obj.fetch_web_properties end 

GoogleAnalytics模型

 def initialize_ga_session(oauth_code) client = OAuth2::Client.new(ENV['GA_CLIENT_ID'], ENV['GA_SECRET_KEY'], { :authorize_url => 'https://accounts.google.com/o/oauth2/auth', :token_url => 'https://accounts.google.com/o/oauth2/token' }) access_token_obj = client.auth_code.get_token(oauth_code, :redirect_uri => ENV['GA_OAUTH_REDIRECT_URL']) self.user = Legato::User.new(access_token_obj) end def fetch_web_properties self.user.web_properties end 

检索Web属性数据:创建报告时

ReportsController

 def create @report = Report.new(params[:report]) @report.get_top_traffic_keywords(session[:oauth_code]) create! end 

报告模型

 def get_keywords(oauth_code) ga = GoogleAnalytics.new ga.initialize_ga_session(oauth_code) # this is a problem b/c the user will be redirected the new_report_path after the callack self.url = ga.fetch_url(self.web_property_id) self.keywords = # Get keywords for self.url from another service keyword_revenue_data(oauth_code) end def keyword_revenue_data(oauth_code) ga = GoogleAnalytics.new ga.initialize_ga_session(oauth_code) revenue_data = # Get revenue data end