错误的身份验证错误 Rails 连接到谷歌驱动器

use*_*432 5 ruby-on-rails learn-ruby-on-rails

我有一个联系人控制器,它有一种方法可以将表单提交的数据连接并保存到我在谷歌驱动器(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
Run Code Online (Sandbox Code Playgroud)

该方法调用我用 figaro 设置的环境变量,这些变量保存在 config/environments/development.rb 中,如下所示:

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

当我提交表单时,出现以下错误:

*GoogleDrive::AuthenticationError at /contacts
Authentication failed for tgolsby: Response code 403 for post https://www.google.com/accounts/ClientLogin: Error=BadAuthentication*
Run Code Online (Sandbox Code Playgroud)

它指向联系人模型中的以下行:

*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*
Run Code Online (Sandbox Code Playgroud)

我已经检查并重新检查了我的用户名和密码,并且 100% 确定它们在 application.yml 文件中是正确的。我已经完成了教程并重复了所有步骤,但我无法弄清楚为什么该应用程序无法连接到谷歌。我还检查过我的谷歌帐户没有设置两步验证。

Dan*_*hoe 2

代码很好(您可以对照learn-rails示例应用程序检查它)。它看起来与Learn Ruby on Rails书中的代码一模一样。

这意味着问题是由环境或配置问题造成的。

首先,你是在本地运行,还是部署到Heroku后出现问题?

如果在本地运行,您可以尝试解决以下问题:

1) 尝试重新启动网络服务器。当您更改配置文件时,必须重新启动服务器。

2) 替换ENV["..."]代码并直接使用凭据(“对凭据进行硬编码”)。请小心,不要使用硬编码凭据将代码签入 git 存储库(并且不要推送到 GitHub,因为这会暴露您的凭据)。

3)您可以从应用程序发送电子邮件吗?注释掉更新电子表格的代码,如果您的凭据正确,您应该能够发送电子邮件。