メール プロバイダーがパスワード リセット メールの送信元のアカウントをブロックしているように見えるユーザーがいます。
irb から実行されている reset-password-URL を取得し、それを手でメールで送信したかったのです。この「edit_password_url」を実行する方法や、それがどこにあるのか、どのスコープで定義されているのかがわかりません。
irb で手動でユーザーのパスワードのリセット URL を生成する方法に関するヒントはありますか?
メール プロバイダーがパスワード リセット メールの送信元のアカウントをブロックしているように見えるユーザーがいます。
irb から実行されている reset-password-URL を取得し、それを手でメールで送信したかったのです。この「edit_password_url」を実行する方法や、それがどこにあるのか、どのスコープで定義されているのかがわかりません。
irb で手動でユーザーのパスワードのリセット URL を生成する方法に関するヒントはありますか?
少しの作業でコンソールから実行できます。これが私がそれにアプローチした方法です:
ターミナルで Rails コンソールを起動します。
$rails c
devise メーラービューを調べて、パスワードのリセット URL を作成するために何を呼び出しているかを確認しました。
<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @token) %></p>
この@resource
コードの はユーザーで、@token
はパスワードのリセット トークンです。
ID、メールなどでユーザーを見つけます。次に、パスワードのリセット トークンを見つけます。
u = User.find(1)
token = u.reset_password_token
ビューにアクセスするには、ActionView::Base のインスタンスを作成する必要があります。
view = ActionView::Base.new
次に、urlヘルパーにアクセスしようとしましたが、deviseは文句を言います
NoMethodError: undefined method `main_app' for #<ActionView::Base>
そのため、そのエラーを修正するには、コンソールにメソッドを入力する必要がありました (これを参照してください)。
def main_app
Rails.application.class.routes.url_helpers
end
現在の Rails コンソール環境でメーラーが正しく構成されているかどうかによっては、:host パラメータが設定されていないというエラーが発生する場合があります。これを避ける_path
には、代わりに_url
. これで、url ヘルパーを呼び出して、ユーザーとトークンに設定した変数を渡すことができます。
edit_password_path(u, :reset_password_token => token)
=> /users/password/edit?reset_password_token=123
簡単に言えば、reset_password_token を見つけて、次の URL に追加する必要があるということです。
http://yourdomain.com/users/password/edit?reset_password_token=<password-token-here>
Devise 3.3 では、次のことを行いました。
$ bin/rails c
> include Devise::Controllers::UrlHelpers