Как использовать хранилище базы данных в Rails для аутентификации Google API - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь интегрировать API Календаря Google с моим приложением Rails 4 и столкнулся с проблемой из-за того, что API ожидают, что токены аутентификации пользователя будут храниться в файле, похожем на " Использовать Google :: Auth :: Stores :: FileTokenStore с базой данных".

Как указано в вопросе и в руководстве по быстрому запуску , Google ожидает, что токен будет представлен в виде файла, но в результате, когда я пытаюсь авторизовать клиента, используя:

...
client = Google::Apis::CalendarV3::CalendarService.new
return unless (user.present? && user.google_auth_token.present? && user.google_auth_refresh_token.present?)
begin
authorizer = Google::Auth::WebUserAuthorizer.new(Google::Auth::ClientId.new(ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET']), Google::Apis::CalendarV3::AUTH_CALENDAR, current_user.google_auth_token)
credentials = authorizer.get_credentials('default')

, я получаю кучу ошибок, таких как

private method 'load' called for string' (`current_user.google_auth_token`)

или что-то, что я передаю вместо чего-то вроде

Google::Auth::Stores::FileTokenStore.new file: TOKEN_PATH

, где он получает токен из хранилища файлов / redis. Я полагаю, что ошибки частного метода происходят из-за неправильного типа объекта, но я не могу понять, что ему дать.

Я попытался добавить и запросить модуль, аналогичный вопросу StackOverflow, но все равно получаю те же ошибки. Я попытался использовать объект, который я получил из этой строки, исправленной обезьяной, но это просто строка JSON, и поэтому я получаю те же ошибки.

Как также упоминалось в исходном вопросе SO, в readme упоминается, что он может обрабатывать только хранилища файлов, но пользовательских хранилищ могут быть реализованы . Но я все еще получаю те же ошибки при вызове метода #get_credentials.

Кто-нибудь сталкивался с этой проблемой раньше? Как я могу использовать свой токен аутентификации пользователя, хранящийся в моей базе данных PostgreSQL, для авторизации API Google?

...