6

メール プロバイダーがパスワード リセット メールの送信元のアカウントをブロックしているように見えるユーザーがいます。

irb から実行されている reset-password-URL を取得し、それを手でメールで送信したかったのです。この「edit_password_url」を実行する方法や、それがどこにあるのか、どのスコープで定義されているのかがわかりません。

irb で手動でユーザーのパスワードのリセット URL を生成する方法に関するヒントはありますか?

4

3 に答える 3

6

少しの作業でコンソールから実行できます。これが私がそれにアプローチした方法です:

ターミナルで 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>
于 2013-10-18T19:55:16.623 に答える
3

Devise 3.3 では、次のことを行いました。

$ bin/rails c
> include Devise::Controllers::UrlHelpers
于 2015-04-27T05:18:53.640 に答える