Ruby 在 Rails 上:错误的用户名/密码? (535 认证失败)

Ruby on Rails: bad username / password? (535 Auth failed)

我刚刚完成了 Bloc 的 ruby 基础课程,我开始全神贯注于 rails 开发。事情进展顺利,直到我遇到了设计和确认电子邮件的障碍。我尝试使用谷歌搜索并四处查看其他一些问题,但没有真正找到任何可以给我任何可以从中提取并适用于我的情况的问题。

我在注册帐户时收到以下错误消息。

Net::SMTPAuthenticationError Devise::RegistrationsController#create

535 身份验证失败:用户名/密码错误


从第 976 行附近的源代码中提取的错误

def check_auth_response(res)
  unless res.success?
    raise SMTPAuthenticationError, res.message
  end
end

来自其他 post 我知道你可能想看到我有一个 config/initializers/setup_mail.rb 文件,如下所示:

if Rails.env.development?
  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:         'heroku.com',
    enable_starttls_auto: true
  }
end

这是一个 application.yml 文件示例:

SENDGRID_PASSWORD: 
SENDGRID_USERNAME:
SECRET_KEY_BASE:

在有人建议之前,我的 config/environments/development.rb 中还有以下内容:

config.action_mailer.default_url_options = { host: 'localhost:3000'}
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
# Override Action Mailer's 'silent errors' in development
config.action_mailer.raise_delivery_errors = true

如果您想查看任何其他文件,请告诉我,我会将它们添加到此 post。

恭喜并欢迎来到黑客世界。

您遇到的错误意味着 SendGrid 服务器收到了错误的用户名 + 密码组合。

可能是您的环境变量为空,并且您的 application.yml 文件未使用您的 SendGrid 用户名 + 密码正确加载。

您可以通过在代码中的某处打印出来来确认这一点。在控制器中工作。

puts "SENDGRID_USERNAME: #{ENV['SENDGRID_USERNAME']}"
puts "SENDGRID_PASSWORD: #{ENV['SENDGRID_PASSWORD']}"

我怀疑它们是零。

我建议阅读 https://quickleft.com/blog/simple-rails-app-configuration-settings/ 了解如何将它们引入您的应用程序。

如果您需要更多帮助,请告诉我!

Two-Factor Authentication is required as of Q4 2020, and all Twilio SendGrid API endpoints will reject new API requests and SMTP configurations made with a username and password via Basic Authentication.

我在过去几年 运行 一直使用的应用程序中收到了类似的问题。从现在开始,基本身份验证不起作用,您需要使用替代身份验证机制。安装时的 Heroku sendgrid 自动配置尚未更新以反映这一点。

来源:https://sendgrid.com/docs/for-developers/sending-email/upgrade-your-authentication-method-to-api-keys/

在我的例子中,错误是使用我的 apikey 的 id 作为用户名,但这是错误的,正确的值 user_name 是 'apikey',(字面意思是 'apikey' 字符串) ,正如他们在集成示例中所说, https://sendgrid.com/docs/for-developers/sending-email/rubyonrails/ https://app.sendgrid.com/guide/integrate/langs/smtp

ActionMailer::Base.smtp_settings = {
:user_name => 'apikey', # This is the string literal 'apikey', NOT the ID of your API key
:password => '<SENDGRID_API_KEY>', # This is the secret sendgrid API key which was issued during API key creation
:domain => 'yourdomain.com',
:address => 'smtp.sendgrid.net',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}