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 文件中是正确的。我已经完成了教程并重复了所有步骤,但我无法弄清楚为什么该应用程序无法连接到谷歌。我还检查过我的谷歌帐户没有设置两步验证。
代码很好(您可以对照learn-rails示例应用程序检查它)。它看起来与Learn Ruby on Rails书中的代码一模一样。
这意味着问题是由环境或配置问题造成的。
首先,你是在本地运行,还是部署到Heroku后出现问题?
如果在本地运行,您可以尝试解决以下问题:
1) 尝试重新启动网络服务器。当您更改配置文件时,必须重新启动服务器。
2) 替换ENV["..."]代码并直接使用凭据(“对凭据进行硬编码”)。请小心,不要使用硬编码凭据将代码签入 git 存储库(并且不要推送到 GitHub,因为这会暴露您的凭据)。
3)您可以从应用程序发送电子邮件吗?注释掉更新电子表格的代码,如果您的凭据正确,您应该能够发送电子邮件。