2

password_reset.text.erbRailsと現在送信しているメーラーファイルで自分のサイトのパスワードリセット機能を作成しています

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
4

1 に答える 1

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を手動で作成する必要があります。

<%= "#{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
于 2012-06-30T22:11:34.447 に答える