3

Rails3アプリケーションでDeviseを使用しています。パスワードをリセットするための現在の動作は、「パスワードをお忘れですか?」をクリックすることです。リンク。ここのリンクは次のとおりです。

(url)/password/new.user

これにより、Devisepasswords_controller.rbで次のメソッドが呼び出されます。

def new
    build_resource({})
end

このメソッドは次のことを行います。

  1. パスワードリセットトークンを生成してデータベースに追加し、

  2. トークンを含むリンクを含む電子メールをその人に送信します。

    (url)/ password / edit?reset_password_token = xxxxxxxxxxxxxxx

ステップ2ではなくステップ1のみを実行するようにDeviseを説得する方法はありますか?これが可能である場合に知っておくべきセキュリティの問題はありますか。Webサイトの一部を簡素化するためにこのアプローチを採用しました。

4

3 に答える 3

6

send_devise_notificationユーザー(?)モデルをオーバーライドし、通知値が。の場合はtrueを返すことをお勧めします:reset_password_instructions。このようなもの:

# app/models/user.rb
def send_devise_notification(notification)
    return true if notification == :reset_password_instructions
end

メール送信の動作をオーバーライド/カスタマイズする方法の例を確認して くださいhttps://github.com/plataformatec/devise/blob/master/lib/devise/models/authenticatable.rb#L127

于 2013-01-31T22:23:40.370 に答える
2

インスタンスレベルで無効にできます。

# disable all notifications
user.define_singleton_method(:send_devise_notification) { |*_| true }

# disable the one you want
user.define_singleton_method(:send_devise_notification) do |*args|
  return true if args[0] == :reset_password_instructions
  super
end
于 2018-01-25T14:43:55.140 に答える
1

質問のタイトルは一般的ですが、質問自体はより具体的です。これは、2021年現在の一般的な質問に対する回答です。

ユーザーパスワードの変更時にパスワード変更の電子メール通知が送信されないようにするには、ユーザーを保存する前にskip_password_change_notification!ユーザーを呼び出します。

user = User.find(123)
user.skip_password_change_notification!
user.password = 'DoNotUse$123'
user.save
于 2021-06-19T14:41:23.367 に答える