【发布时间】:2020-08-03 17:51:06
【问题描述】:
正如标题所说,我有一个在 Heroku 中运行的 Rails 6 应用程序,带有 Heroku 提供的自动 SSL 证书。
一切都很好,我可以访问任何页面,并且 https 工作正常。但是,有一个例外:
当用户注册并收到确认电子邮件时,单击链接不起作用出于某种原因(请参阅下面的附加屏幕截图),即使您将链接复制并粘贴到新标签中也会发生同样的情况,当然。
- Ruby 版本:2.7.1p83
- Rails 版本:6.0.3.1
这是我在尝试访问该 URL https://my_domain.com/users/confirmation?confirmation_token=foobar 时得到的。
我的environments/production.rb 有这些设置:
Rails.application.configure do
# a few more non important things, and then:
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.smtp_settings = {
:user_name => ENV['SENDGRID_USERNAME'],
:password => ENV['SENDGRID_PASSWORD'],
:domain => 'my_domain.com',
:address => 'smtp.sendgrid.net',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
config.force_ssl = true
config.action_mailer.default_url_options = { :host => 'my_domain.com' }
end
这就是 Heroku 中的样子:
我有这些路线供设计:
Rails.application.routes.draw do
devise_for :users, controllers: { registrations: 'users/registrations',
confirmations: 'users/confirmations' }
authenticated :user do
root to: "depots#index", as: :authenticated_root
end
root to: "public/welcome#index"
end
控制器看起来像这样:
class Users::ConfirmationsController < Devise::ConfirmationsController
def after_confirmation_path_for(resource_name, resource)
sign_in(resource)
authenticated_root_path
end
end
你们对可能出现的问题有任何想法吗?如果没有,关于如何解决此问题的任何建议?
2020 年 8 月 4 日更新:
我已将此重定向添加到我的域,但即使它可以从 grownis.com 重定向到 www.grownis.com,它也不适用于 https://grownis.com
【问题讨论】:
-
澄清一下——当您访问该站点时,您说 SSL 正在工作。所以你可以拉出其他路线,而不是那个特定的设计路线?如果您手动将链接更改为 HTTP 而不是 HTTPS,会发生什么情况?当您发出失败的请求时,您是否在日志中看到任何内容?
-
@Justin 没错。其他所有路线都运行良好,那条路线似乎有些奇怪。如果我将 url 从 https 更改为 http,它会自动返回 https 并触发相同的错误
-
明白了——日志呢?老实说,这似乎是 Heroku 发生的一些奇怪的事情(而且可能是暂时的)。我也会尝试重新启动 dynos。
-
试过
heroku logs --ps router和heroku logs但请求根本没有出现在那里。尝试重新启动测功机,问题仍然存在...... -
啊,好吧,我没主意了。虽然如果请求根本没有出现在日志中,这意味着它甚至没有命中 Heroku,至少在他们看来是这样。
标签: ruby-on-rails ssl heroku