3

パスワードを忘れた場合にクリックすると、任意の電子メール ID にメールが送信されるようにするためのデバイスのカスタマイズを探しています。メールIDが存在するかどうかに関係なく、Gmailで同様のことが起こります。

画面 1 ここに画像の説明を入力

画面 2 ここに画像の説明を入力

現在私が持っているのは、システム内の有効なユーザーで検証しようとするものです。

ここに画像の説明を入力

Devise回復可能なモジュールがこれを処理します

       def send_reset_password_instructions(attributes={})
          recoverable = find_or_initialize_with_errors(reset_password_keys, attributes,   :not_found)
          recoverable.send_reset_password_instructions if recoverable.persisted?
          recoverable
        end

この検証を削除して、電子メールを任意の電子メール ID に送信するにはどうすればよいですか?

4

2 に答える 2

15

paranoidtrue に設定すると、電子メールの列挙を回避するようにメッセージを変更するという Devise 構成があります。config.paranoid = trueDeviseの設定で設定するだけです。

于 2014-06-07T16:21:19.847 に答える
2

私の解決策は、Devise のパスワード コントローラーを拡張/オーバーライドすることです。これを行うには、次のように、Devise のパスワード コントローラーから継承するコントローラー (パスワードと呼びましょう) を作成します。

class PasswordsController < Devise::PasswordsController

次に、この変更が有効になるようにルート ファイルを編集します。

devise_for :users, :controllers => { :passwords => 'passwords' }

create次に、アクションをオーバーライドします。これを行う方法はいくつかありますが、何をしたいのかよくわからないので、できることを 2 つ紹介します。

  1. 「メールが見つかりません」というエラーのみを防止して、データベースに存在するメールまたは存在しないメールを人々が見つけられないようにするだけです。

    def create
      self.resource = resource_class.send_reset_password_instructions(resource_params)
    
      respond_with({}, :location => after_sending_reset_password_instructions_path_for(resource_name))
    end
    
  2. 入力した電子メールに電子メールを送信したい場合:

    def create
      self.resource = resource_class.send_reset_password_instructions(resource_params)
    
      unless successfully_sent?(resource)
        Devise::Mailer.reset_password_instructions(resource).deliver
      end
    
      respond_with({}, :location => after_sending_reset_password_instructions_path_for(resource_name))
    end
    

さて、この最後の解決策の問題は、存在しないユーザーに電子メールを送信していることです...そして、ユーザーが戻ってきたとき、彼のユーザーアカウントはできるため、新しいパスワードを入力することができません見つからない。しかし、あなたが本当にこれをやりたいのなら、うまくいけば、私はあなたを正しい軌道に乗せることができます.

于 2012-11-10T15:27:37.433 に答える