Ruby on rails 将Google::Auth::Stores::FileTokenStore与数据库一起使用
我正试图在我的应用程序中实现一个三条腿的谷歌API认证,以便能够访问注册用户的谷歌日历 在中,这个命令出现了,据我所知,应该指向用户的令牌: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)中 我是否错误地理解了命令的用途?如何将其用于数据库存储 根据以下要求,自己实施: 还可以使用自定义存储实现。
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令牌
列,以便用户
模型使用此令牌存储正确更新。