GoogleAPI Clientには Google::Auth::TokenStore
というトークンを保存するためのインターフェースが存在していて、デフォルトでは
Google::Auth::Stores::FileTokenStore
Google::Auth::Stores::RedisTokenStore
のふたつがある。これのS3バージョン。
ひとつ下の記事の FileTokenStore
を置き換えられる。
GCSじゃないの?というツッコミは無しで...w cacheは厳密にはいらないけど何回も呼ぶときがあるかなと思って用意しました。
require 'googleauth/token_store' require 'aws-sdk' class S3TokenStore < Google::Auth::TokenStore def initialize(bucket_name:, path_prefix:) @bucket = Aws::S3::Resource.new.bucket(bucket_name) raise "Bucket(#{bucket_name}) not exists" unless @bucket.exists? @path_prefix = path_prefix @cache = {} end def load(id) @cache[id] ||= begin object = object(id) if object.exists? object.get.body end end end def store(id, token) object(id).put(body: token) @cache[id] = token end def delete(id) object(id).delete @cache.delete(id) end private def object(key) @bucket.object("#{@path_prefix}#{key}") end end