Ruby on rails 将Google::Auth::Stores::FileTokenStore与数据库一起使用

Ruby on rails 将Google::Auth::Stores::FileTokenStore与数据库一起使用,ruby-on-rails,ruby,google-api,google-oauth,Ruby On Rails,Ruby,Google Api,Google Oauth,我正试图在我的应用程序中实现一个三条腿的谷歌API认证,以便能够访问注册用户的谷歌日历 在中,这个命令出现了,据我所知,应该指向用户的令牌: token_store = Google::Auth::Stores::FileTokenStore.new(file: CREDENTIALS_PATH) 它需要存储(或)令牌,但是(当然)我将每个用户的令牌存储在我的数据库(Postgres)中 我是否错误地理解了命令的用途?如何将其用于数据库存储 根据以下要求,自己实施: 还可以使用自定义存储实现。

我正试图在我的应用程序中实现一个三条腿的谷歌API认证,以便能够访问注册用户的谷歌日历

在中,这个命令出现了,据我所知,应该指向用户的令牌:

token_store = Google::Auth::Stores::FileTokenStore.new(file: CREDENTIALS_PATH)
它需要存储(或)令牌,但是(当然)我将每个用户的令牌存储在我的数据库(Postgres)中

我是否错误地理解了命令的用途?如何将其用于数据库存储


根据以下要求,自己实施:

还可以使用自定义存储实现。有关更多详细信息,请参阅


通过上述文件的外观,用ActiveRecord(或其他ORM)实现
load(id)
store(id,token)
delete(id)
,应该不会太难。

我根据@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
谷歌模块
模块认证
模块存储
类DatabaseTokenStore
非常感谢您!我仍然感到困惑,尽管这没有得到更多的关注?@FellowStranger如果你来自不同的语言,可能需要一段时间才能习惯解决类似的问题:)gem给出了一个更明确的例子,说明如果你提供自己的实现,必须实现哪些方法。哇,再次感谢!(现在意识到这个简单的API集成将花费比预期多得多的时间……:/)不客气,祝你好运!如果答案有助于你获得那些闪亮的互联网点,别忘了标记答案;)你能分享使用这个类的代码吗?@AbubakrA.Hafiz自述文件中的web示例很有用:但是修改token_store,比如
token_store=Google::Auth::Stores::DatabaseTokenStore。新建
你还需要一个带有
token
token_expires\u的用户表,和
刷新\u令牌
列,以便
用户
模型使用此令牌存储正确更新。