Rails服务+ oauth代码结构

时间:2013-06-06 18:49:50

标签: ruby-on-rails ruby

我在构建OAuth集成到我的网络应用程序中的逻辑时遇到了麻烦。在应用程序中,用户创建一个报告,其中包含来自其Google Analytics(分析)帐户的数据。

用户步骤:

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

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

    当用户点击“新报告”时,它们实际上会重定向到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
    

    在创建报告时检索网络媒体资源

    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
    

0 个答案:

没有答案