Ошибка неверной аутентификации Rails при подключении к диску Google

У меня есть контроллер контактов, в котором есть способ подключения и сохранения данных, отправленных из формы, в электронную таблицу в моем аккаунте на диске Google (app/models/contact.rb):

def update_spreadsheet
    connection = GoogleDrive.login(ENV["GMAIL_USERNAME"], ENV["GMAIL_PASSWORD"])
    ss = connection.spreadsheet_by_title('Learn-Rails02-Example')
    if ss.nil?
        ss = connection.create_spreadsheet('Learn-Rails02-Example')
    end

Метод вызывает переменные окружения, которые я настроил с помощью figaro и которые сохраняются в config/environment /development.rb следующим образом:

GMAIL_USERNAME: tgolsby@gmail.com
GMAIL_PASSWORD: Paxxword (obviously this is a place holder for my actual password in the .yml file)

Когда я отправляю свою форму, я получаю следующую ошибку:

*GoogleDrive::AuthenticationError at /contacts
Authentication failed for tgolsby: Response code 403 for post https://www.google.com/accounts/ClientLogin: Error=BadAuthentication*

Это указывает на следующую строку в модели контактов:

*def update_spreadsheet*
    **connection = GoogleDrive.login(ENV["GMAIL_USERNAME"], ENV["GMAIL_PASSWORD"])**
    *ss = connection.spreadsheet_by_title('Learn-Rails02-Example')
    if ss.nil?
        ss = connection.create_spreadsheet('Learn-Rails02-Example')
    end*

Я проверил и перепроверил свое имя пользователя и пароль, и я на 100% уверен, что они верны в файле application.yml. Я прошел учебник и повторил все шаги, но я просто не могу понять, почему у приложения возникают проблемы с подключением к Google. Я также проверил, что в моей учетной записи Google не настроено двухэтапное подтверждение.

3 ответа

У вас может быть та же проблема, что и у меня. Я получал доступ к своему документу Google с помощью гема google_drive в личном проекте, к которому я не прикасался более года. Раньше я мог получить доступ к своему документу Google, включив сеанс с помощью session = GoogleDrive.login('rosalyntest1@gmail.com', 'password') но теперь получал ту же ошибку, что и вы.

Я вошел в эту учетную запись, используя свой пароль, и увидел письмо от Google с темой "вход заблокирован". Я перешел по ссылке https://www.google.com/settings/security/lesssecureapps чтобы включить менее безопасный доступ к приложениям только для этой учетной записи, и смог включить сеанс локально с использованием того же кода. Я хотел бы проверить вашу учетную запись Google и посмотреть, получили ли вы электронное письмо или разрешить менее безопасный доступ к приложению, и попробовать еще раз.

Код хорош (вы можете проверить его по примеру приложения learn-rails). Это выглядит точно так же, как код из книги Learn Ruby on Rails.

Это означает, что проблема является результатом проблемы среды или конфигурации.

Во-первых, вы работаете локально или у вас есть проблемы после развертывания в Heroku?

Если вы работаете локально, вот что вы можете попробовать устранить:

1) Попробуйте перезапустить веб-сервер. При изменении файлов конфигурации сервер должен быть перезапущен.

2) Заменить ENV["..."] в коде и использовать учетные данные напрямую ("жестко закодировать учетные данные"). Будьте осторожны, чтобы не вносить код в репозиторий git с жестко закодированными учетными данными (и не переходите на GitHub, потому что вы могли бы выставить свои учетные данные).

3) Можете ли вы отправить электронное письмо из приложения? Закомментируйте код, который обновляет электронную таблицу, и вы сможете отправлять электронную почту, если ваши учетные данные верны.

У меня тоже была эта проблема, и я смог ее исправить, сделав код ENV["GMAIL_PASSWORD"] в моих контактах моделирующим, так же как и в моей среде. Это не работало, когда в коде были только первые буквы, а в переменной env все в заглавных буквах, поэтому обязательно учитывайте чувствительность к регистру в вашей среде.

Другие вопросы по тегам