我正在使用rails和我正在发送的邮件password_reset.text.erb
文件中为我的网站创建密码重置功能
http://localhost:3000/password_resets/<%=@user.password_reset_token%>/edit/
在我的开发环境中。如果令牌与保存的模型匹配,这将触发我的控制器重置密码并重定向用户编辑密码。
但是,我想动态配置它,所以当我部署到heroku时,它会知道将其更改为mywebsite.com/password_resets/...
我该怎么做?
编辑:
def password_reset(user)
@user = user
mail(to: user.email, subject: "Bitelist Password Reset")
end
答案 0 :(得分:1)
通常,我会在适当的config/environment
文件中配置邮件程序的主机信息。
config.action_mailer.default_url_options = { :host => "example.com" }
您可以查看此页面的“生成网址”部分:http://rails.rubyonrails.org/classes/ActionMailer/Base.html
使用该配置集,典型的路由结构似乎运行得非常好。我不是100%肯定您的情况下可用的路线,因此您可能仍需要手动构建完整的URL以包含重置令牌组件。
要生成实际的URL,如果您的路由设置为具有带有用户令牌的命名路由,则可以使用命名路由。即。
<%= edit_password_resets_url(@user.password_reset_token) %>
如果您没有将令牌集成到现有路由中,则可能需要手动构建URL:
<%= "#{url_for(:controller => 'password_resets', :action => 'whatever_action_this_is')}/#{@user.password_reset_token}/edit/" %>
甚至使用default_url_options[:host]
完全手动构建它,然后添加上面的其余部分。
如果需要,你也可以在请求时设置主机,虽然这可能是过度的(并且不会是线程安全的)。
def set_mailer_host
ActionMailer::Base.default_url_options[:host] = request.host_with_port
end