【问题标题】:Sendgrid not accepting username/passwordSendgrid 不接受用户名/密码
【发布时间】:2019-11-14 01:22:02
【问题描述】:

我关注https://www.udemy.com/course/the-complete-ruby-on-rails-developer-course/,虽然我可以发送一封关于开发的电子邮件,但在 Heroku 上是另一回事。在使用 devise 注册时,heroku 抛出一个 535 错误,告诉我我的用户名/密码错误。我检查了我的配置变量,并且确实设置了 sendgrid_username 和密码。我运行了 heroku run printenv,结果如下。

RAILS_SERVE_STATIC_FILES=enabled
DATABASE_URL=postgres://
GEM_PATH=/app/vendor/bundle/ruby/2.5.0:
PORT=18178
RAILS_ENV=production
RAILS_LOG_TO_STDOUT=enabled
COLUMNS=80
TERM=xterm-256color
RACK_ENV=production
SHLVL=1
SENDGRID_PASSWORD=SG.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SENDGRID_USERNAME=my-api-key
MALLOC_ARENA_MAX=2

我也用这个初始化器

ActionMailer::Base.delivery_method = :smtp
 ActionMailer::Base.smtp_settings = {
  address:        'smtp.sendgrid.net',
  port:           '587',
  authentication: :plain,
  user_name:      ENV['SENDGRID_USERNAME'],
  password:       ENV['SENDGRID_PASSWORD'],
  domain:         'my-app.herokuapp.com',
  enable_starttls_auto: true
 }

我想以此作为垫脚石,自学如何设置基本联系表单,但现在我不太明白为什么没有设置密码和用户名。

我已经看这个太久了,需要一个新的眼睛(和睡眠)。如果您需要更多代码,请告诉我。

更新:我开始认为 Sendgrid 的结局有些可疑。我稍后会联系支持人员,并尝试深入了解此问题并稍后更新问题所在。

【问题讨论】:

  • 假设您没有隐藏域以保护隐私......我相信您的域需要设置为您的实际 heroku 域(不仅仅是 heroku.com)。另外,您的 SENDGRID_USERNAME 和 PASSWORD 的格式是什么?对于用户名和字母数字密码,它应该类似于app123456789@heroku.com。另外(不确定这是否重要),但大多数示例将端口号作为整数,而不是字符串。
  • 感谢您的回复。是的,我的初始化程序中的“heroku.com”实际上是“my-website.heroku.com”,我将编辑 OP 以消除混淆。至于用户名和密码,视频中的讲师向我们展示了我们在 sendgrid 中为用户名生成的 API 密钥的名称以及创建密钥后出现的一次性密码。那是对的吗?我确实将 heroku 中的用户名编辑为我的应用程序的名称,只是为了试一试,但这也是不行的。
  • 另外,对于端口号,我不知道如何更改它。从技术上讲,因为我几个月前在同一台计算机上做了这个项目并且它工作(虽然这里的假人显然忘记了一些东西)我不确定从那时起它会如何改变。
  • 而且我还把密码改成了API Key id。还是不行。

标签: ruby-on-rails devise sendgrid


【解决方案1】:

好的,伙计们,部分原因是新手错误,另一部分是视频是为 Rails 4 制作的。

首先,我的错误是我误解了将哪个值放在哪里。我输入了在您的 sendgrid 名称下方列出的 API 密钥 ID 作为密码。那是不正确的。您的 sendgrid 用户名是您在创建密钥时提供的名称,sendgrid 密码是创建时出现在您面前的一次性密码。不要失去它。

其次,我必须向 Udemy 的 @TONYD 大声疾呼,他详细回答了如何将 rails 5.2 设置为 rails 6 应用程序以及原因。伙计,我欠你一杯啤酒,因为你救了我所有的麻烦。 :)

Rails 5.2 中的 Sendgrid 凭据 - 正确方法 1

托尼·第257讲·一年前 因此,从其他教程中,我完成了保存 SendGrid 用户名和密码凭据的 .profile 方法似乎不再正确。 (至少对于本地开发——我正在使用 VS Code 在 MacOS 中执行此操作)我环顾四周,发现这篇关于使用加密的 credentials.yml.enc 文件存储这些东西的文章。很好,因为它是加密的,它特定于项目,以及你为未来版本的 Rails 设置。

https://www.viget.com/articles/storing-secret-credentials-in-rails-5-2-and-up/

其中一个重要的注意事项是 --wait 命令,具体取决于您使用的编辑器! :)

这篇文章没有确切说明如何格式化 sendgrid 的凭据,但我发现这个 gem 描述了如何设置格式:

https://github.com/padovanl/progettoRuby

 sendgrid:
  user_name: <sendgrid_user_name>
  password: <sendgrid_pwd>

松开

用户名将是:apikey

密码是教程前面生成的apikey。

所以在 credentials.yml.enc 文件中它最终应该看起来像这样:

  sendgrid:
   user_name: apikey
   password: 145534yourapikey-etc-etc

接下来 - 您需要为开发环境和生产环境分别配置 actionmailer...

所以不要将 ActionMailer 块放在 environement.rb 中。

在 development.rb 中放置这个块:

 ActionMailer::Base.smtp_settings = {
   :address => 'smtp.sendgrid.net',
   :port => '587',
   :authentication => :plain,
   :user_name => Rails.application.credentials[:sendgrid][:user_name],
   :password => Rails.application.credentials[:sendgrid][:password],
   :domain => 'heroku.com',
   :enable_starttls_auto => true
 }
  config.action_mailer.delivery_method = :test
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }

note :host line - 根据视频输入你的 url - 我在本地做这个,所以对我来说它是 localhost:3000

然后在 production.rb 中放这个块:

config.action_mailer.smtp_settings = {
  :user_name => ENV['SENDGRID_USERNAME'],
  :password => ENV['SENDGRID_PASSWORD'],
  :domain => 'yourdomain.com',
  :address => 'smtp.sendgrid.net',
  :port => 587,
  :authentication => :plain,
  :enable_starttls_auto => true
 }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.default_url_options = { :host => 'photo-app-tonyd.herokuapp.com', :protocol => 'https' }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多