0

本当にシンプルなRailsアプリケーションは、Googleカレンダーアカウントにカレンダーイベントを追加するという特定の目的で作成しています。RailsでGoogleカレンダーのAPIに接続

私はRuby Guide from the Google Calendar APIに従っています。

私は提供されたテストコード(Rubyのみ、フレームワークなし)を実行することができましたが、私はRailsプロジェクトからの資格情報にアクセスするのに苦労していて、適切な( "慣用的な"?)方法それを行い、プロジェクトを整理する。

この目標ではGoogleユーザーのプライベートデータにアクセスする必要があるため(読み取りと書き込みの両方)、OAuth 2.0を使用しています。私はUsing OAuth 2.0 for Web Services命令に従っています。

今私は、ベストプラクティス、および/またはコードを整理するための適切な方法について、いくつかの異なる質問がある:

  1. Googleがアプリケーションにアクセスするための資格情報を持っているclient_secret.jsonを提供します。私はどこを保つべきですか?開発環境の.envファイルと私の場合は、プロダクション環境のHerokuのENV VARSファイルに保存する必要がありますか?

  2. は私が.gitignoreに追加して、(Gemfileと同じパス)client_secret.jsonプロジェクトのルートフォルダ内のファイルを維持しようとしたが、私はrequire "#{Rails.root}/client_secret.json"することができませんでした:

    /Users/jsoifer/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require': No such file to load -- /Users/jsoifer/Developer/Tiny-Things/tiny-booking/client_secret.json (LoadError) 
    
  3. 私はservices/フォルダを作成してGoogleカレンダー関連のコードを内部に入れましたが、コントローラに入れるべきかどうかはわかりませんでした。どのように私はこれを整理する必要がありますか?

重要な考慮事項: 私は、このような工夫や他人との認証/承認の他の方法を使用していないと私は今、そうすることを計画していませんよ。私はちょうどGoogleの認可トークンを取得し、カレンダーイベントを作成したい。

Github Project Link

答えて

0

私はこれを把握することができたし、下記の各質問に対する回答を掲載します:client_secret.jsonファイルの

  1. One of the possible locationsconfig/client_secret.jsonです。 Herokuの生産に出荷する場合は、ENV Varsを使用してください。

  2. jsonファイルで資格情報をインポートする適切な方法ではないことを要求します。 使用Google::APIClient::ClientSecrets.load(File.join(Rails.root, 'config', 'client_secret.json'))は(ファイルと仮定するとconfig/に確かである。コードを整理する方法についてなど

  3. There are several different alternatives。私が認可ロジックを保持しているサービスフォルダとgoogle_calendar.rbクラスを作成することになりました。

ここでは、コードです:

app/services/google_calendar.rb

require 'google/api_client/client_secrets' 
require 'google/apis/calendar_v3' 

class GoogleCalendar 
    # Attributes Accessors (attr_writer + attr_reader) 
    attr_accessor :auth_client, :auth_uri, :code 

    def initialize 

    # ENV: Development 
    # Google's API Credentials are in ~/config/client_secret.json 
    client_secrets = Google::APIClient::ClientSecrets.load(File.join(Rails.root, 'config', 'client_secret.json')) 
    @auth_client = client_secrets.to_authorization 

    # Specify privileges and callback URL 
    @auth_client.update!(
     :scope => 'https://www.googleapis.com/auth/calendar', 
     :redirect_uri => 'http://localhost:3000/oauth2callback' 
    ) 

    # Build up the Redirecting URL 
    @auth_uri = @auth_client.authorization_uri.to_s 

    end 

end 

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 

    # Starting action in config/routes.rb 
    def welcome 

    # Redirect to Google Authorization Page 
    redirect_to GoogleCalendar.new.auth_uri 

    end 

    def token 
    # Get a auth_client object from Google API 
    @google_api = GoogleCalendar.new 

    @google_api.auth_client.code = params[:code] if params[:code] 
    response = @google_api.auth_client.fetch_access_token! 

    session[:access_token] = response['access_token'] 

    # Whichever Controller/Action needed to handle what comes next 
    redirect_to new_event_path() 
    end 

end 
は、
関連する問題