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

时间:2014-01-12 01:51:01

标签: ruby-on-rails learn-ruby-on-rails

我有一个联系人控制器,它有一种方法可以将表单中提交的数据连接并保存到我在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 / 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步验证。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

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

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

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

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

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

答案 2 :(得分:0)

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