错误的身份validation错误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 

该方法调用我使用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文件中是正确的。 我已经完成了教程并重复了所有步骤,但我无法弄清楚为什么应用程序无法连接到谷歌。 我还检查了我的谷歌帐户上没有设置2步validation。

您可能遇到了同样的问题。 我使用google_drive gem访问了我的谷歌文档,这个项目是我一年没有碰过的。 我过去能够通过使用session = GoogleDrive.login('rosalyntest1@gmail.com', 'password')启用会话来访问我的Google文档,但现在收到与您相同的错误。

我使用密码登录了该帐户,并看到了谷歌发送的一封电子邮件,主题是“登录已被屏蔽”。 我按照https://www.google.com/settings/security/lesssecureapps链接为该帐户启用了安全性较低的应用访问,并且能够使用相同的代码在本地启用会话。 我会检查您的Google帐户,看看您是否收到了电子邮件或启用了不太安全的应用访问权限,然后重试。

代码很好(您可以根据learn-rails示例应用程序进行检查)。 它看起来与Learn Ruby on Rails书中的代码完全相同。

这意味着问题是由环境或配置问题引起的。

首先,您是在本地运行,还是在部署到Heroku后遇到问题?

如果在本地运行,您可以尝试进行故障排除:

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

2)替换代码中的ENV["..."]并直接使用凭证(“硬编码凭证”)。 注意不要使用硬编码凭证检查代码到git仓库中(并且不要推送到GitHub,因为你会暴露你的凭证)。

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

我也有这个问题,我能够通过在我的联系人模型中使用ENV [“GMAIL_PASSWORD”]代码来解决这个问题,就像在我的环境中一样。 当我在代码中只有第一个字母大写但env变量中有大写字母时,它无法正常工作,因此请务必考虑环境的区分大小写。