7

パスワードのリセット手順については、Rails Devise メーラー ビューをカスタマイズできるようにする必要があります。

そのためには、2 つのことを行う必要があります。

  1. 特定のビジネス ロジックに基づくホスト/ドメインになるように、リンクのカスタム URL を指定します。このホストとドメインは、ユーザーが [パスワードを忘れた場合] をクリックしたときに、ブラウザーの URL、つまり要求オブジェクトから取得されます。そのため、delayed_job には必要に応じて処理するための要求オブジェクトがありません。したがって、電子メールを送信しているdelayed_job のある時点でこれを実行できるようにする必要があります。

  2. カスタム変数をメーラー ビューに渡して、ビューにさまざまなロジックを追加し、必要に応じてビットを表示または非表示にできるようにします。

誰でも助けることができますか?devise のメーラー ビューを生成できることがわかりますが、さまざまなアイテムをそれに渡すこともできる必要があります。たとえば、ユーザーモデルとパスワードコントローラーで関数を自分で何らかの方法でオーバーライドする必要がありますか?

4

5 に答える 5

1

を追加してsource、パスワードのリセット ビューに含める必要がありました。実装したのは次のとおりです。

class User < ActiveRecord::Base
  prepend ResetPasswordWithSource

  devise :recoverable

  ....
end

module User::ResetPasswordWithSource
  def send_reset_password_instructions(source=nil)
    @source = source
    super()
  end

  def send_devise_notification(notification, *args)
    args.last.merge!({ source: @source })
    super
  end
end

ここからあなたはただ電話することができますuser.send_reset_password_instructions('special_source')

そして、経由でビューにアクセスできます@options[:source] = 'special_source'

于 2014-03-21T15:02:25.143 に答える
1

そのため、苦労して検索したり、ハッキングしたりした後...これは不可能です。そのため、私は自分のメーラーを作成し、コントローラのデバイスリセットパスワードメソッドをバイパスして、自分のリセットトークンを生成し、必要な変数を設定し、usermailer と呼んで....それを取得するためにデバイスの URL をメールに埋め込みました。パスワードリセットリンクがクリックされたら、デバイスを呼び出して、すべてがうまくいきました....

ロジックを書き直す必要はありませんでしたが、最終的にはこれが最も迅速でクリーンなソリューションです。

ほとんど機能したアプローチの 1 つは、ユーザー モデルでアクティブでないレコード属性を使用して、必要なビットを保存し、それをデバイス ビューの @resource に「ハッキング」することでしたが、その結果、デバイスに何らかの悲しみが生じていました。 、上記のオプションを使用しました...

于 2012-07-20T14:45:06.793 に答える