5

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

当我提交表单时,我收到以下错误:

*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 文件中是正确的。我已经阅读了教程并重复了所有步骤,但我无法弄清楚为什么应用程序无法连接到谷歌。我还检查了我没有在我的谷歌帐户上设置两步验证。

4

3 回答 3

3

你可能和我有同样的问题。在我一年多没有接触过的个人项目中,我正在使用 google_drive gem 访问我的 google 文档。我曾经可以通过启用会话来访问我的谷歌文档,session = GoogleDrive.login('rosalyntest1@gmail.com', 'password')但现在遇到了和你一样的错误。

我使用我的密码登录该帐户,并看到一封来自谷歌的电子邮件,主题为“登录被阻止”。我点击链接 https://www.google.com/settings/security/lesssecureapps只为该帐户启用不太安全的应用程序访问,并且能够使用相同的代码在本地启用会话。我会检查您的谷歌帐户,看看您是否收到了电子邮件或启用不太安全的应用程序访问,然后重试。

于 2014-08-13T23:20:05.120 回答
2

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

这意味着问题是环境或配置问题的结果。

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

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

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

2)替换ENV["..."]代码并直接使用凭证(“硬编码凭证”)。注意不要使用硬编码的凭据将代码签入 git repo(并且不要推送到 GitHub,因为您会暴露您的凭据)。

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

于 2014-01-12T12:48:54.063 回答
0

我也遇到了这个问题,我可以通过将联系人模型中的 ENV["GMAIL_PASSWORD"] 代码全部大写来解决它,就像在我的环境中一样。当我在代码中只有第一个字母大写但 env 变量中的所有内容都大写时,它不起作用,因此请务必考虑环境的大小写敏感性。

于 2014-09-21T22:15:28.653 回答