2016-08-01 11 views
1

登録ユーザーのGoogleカレンダーにアクセスできるように、私のアプリでGoogle APIに3足の認証を実装しようとしています。データベースを使用してGoogle :: Auth :: Stores :: FileTokenStoreを使用する

quickstart Ruby guide

、このコマンドは限り私は理解して、ユーザーのトークンを指している必要がありますことをアップします:

token_store = Google::Auth::Stores::FileTokenStore.new(file: CREDENTIALS_PATH) 

それはトークンがin a file(またはRedis)に保存された期待していますが、(もちろん)私が保管私のデータベース(Postgres)の各ユーザのトークン。

私はコマンドの目的が間違っているかどうかを理解していますか?データベースストアでどのように使用しますか?

Official documentation

答えて

1

@ Rafeの答えに基づいて自分で実装しました。ちょうど誰かがActiveRecord /データベースストアの実装をコピーしたい場合に備えて共有したいと思います:

module Google 
    module Auth 
    module Stores 
     class DatabaseTokenStore < Google::Auth::TokenStore 
     def load(id) 
      user = User.find(id) 
      { 
      "client_id": ENV['google_client_id'], 
      "access_token": user.token, 
      "refresh_token": user.refresh_token, 
      "scope": ENV['google_scopes'], 
      "expiration_time_millis": user.token_expires_at 
      }.to_json 
     end 
     def store(id, token) 
      user = User.find(id) 
      hsh = JSON.parse(token) 
      user.update(
      token: hsh["access_token"], 
      token_expires_at: hsh["expiration_time_millis"]/1000 
     ) 
     end 
     end 
    end 
    end 
end 
1

the readmeによると、それを自分で実装します。

カスタムストレージの実装にも使用することができます。詳細については、token_store.rbを参照してください。

言及したファイルのルックスではActiveRecord(または別のORM)とload(id)store(id, token)delete(id)を実装するにはあまりにも難しいことではありません。

+0

ありがとうございました!これはもっと注意を払われていないが、私はまだバッファローされていますか? –

+1

@FellowStrangerもしあなたが別の言語から来たのであれば、これを解決するために[ダックタイピング](https://en.wikipedia.org/wiki/Duck_typing)に慣れるのに時間がかかるかもしれません:)もっと明白な例は次のとおりです。 [activerecord-session_store](https://github.com/rails/activerecord-session_store#configuration)宝石によって与えられます。独自の実装を提供する場合、どのメソッドを実装する必要がありますか? – Rafe

+0

うわー、もう一度ありがとう! (これを実現するには、この単純なAPIの統合には予想以上に多くの時間が必要です。:/) –

関連する問題