2012-06-30 47 views
2

我在軌創建我的網站密碼重置功能,在我的郵件password_reset.text.erb文件我目前在我的開發環境中發送動態預置爲開發和生產環境

http://localhost:3000/password_resets/<%[email protected]_reset_token%>/edit/

的URL。如果令牌與保存的模型匹配,這將打擊我的控制器以重置密碼並重定向用戶編輯密碼。

不過,我想配置這個動態的,所以當我部署到Heroku的會知道它改成mywebsite.com/password_resets/...

我將如何做到這一點?

編輯:

def password_reset(user) 
    @user = user 
    mail(to: user.email, subject: "Bitelist Password Reset") 
end 
+0

您是否使用典型的ActionMailer調用來發送電子郵件? –

+0

是在我上面的UserMailer中看到我的'password_reset'。 – locoboy

回答

1

通常我配置了郵件的主機信息在適當的config/environment文件。

config.action_mailer.default_url_options = { :host => "example.com" } 

你可以看看這個頁面的「生成的URL」部分:http://rails.rubyonrails.org/classes/ActionMailer/Base.html

通過這種結構設置典型的路由結構,似乎很好地工作。我並不是100%肯定在你的情況下可用的路由,所以你可能仍然需要手動構建完整的URL來包含重置令牌組件。

要生成可以潛在地使用命名的路線,如果你的路由,在您有一個名爲路線,需要一個用戶令牌的方式建立實際的URL。即

<%= edit_password_resets_url(@user.password_reset_token) %> 

如果你沒有令牌集成到現有的路線,你可能需要手動建立的網址:

<%= "#{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 
+0

我也應該注意我之前從未使用過Heroku,因此可能會有更適合Heroku的解決方案。 –

+0

所以在'development.rb'我應該有'config.action_mailer.default_url_options = {:主機=> 「本地主機:3000」}'和'production.rb'我應該有'config.action_mailer.default_url_options = {:主機=>「website.com」}'? – locoboy

+0

我相信有一個單獨的':port'選項可以用來指定3000,但是否則是這樣的。 –