簡體   English   中英

Rails 3設計忘了密碼與多個電子郵件

[英]Rails 3 Devise Forgot Password w/ Multiple Emails

我有我的Rails 3設置w / Devise但稍微扭曲:我將所有用戶的電子郵件存儲在emails表中,每個用戶可以有多個電子郵件。 我遇到了忘記密碼功能的問題。 我知道我必須覆蓋一些Devise用於查找用戶電子郵件然后發送密碼重置的方法,但我不知道從哪里開始。 我非常感謝您提供給我的任何建議。

Devise從模型方法'email'獲取電子郵件地址。 因此,如果您使用電子郵件模型將所有電子郵件存儲在電子郵件表中,則可以在用戶模型中定義“電子郵件”方法,並從電子郵件表中返回地址。

class User < ActiveRecord::Base
  devise :database_authenticatable, :recoverable, :rememberable, :authentication_keys => [ :login ], :reset_password_keys => [ :login ]
  has_many :emails
  ...
  def email
    emails.map{|record| record.email }
  end
end

見我的回答對一個類似問題。 您在Devise::Mailer創建一個覆蓋headers_for的郵件程序,以便將其發送到多個電子郵件:

def headers_for(action)
  #grab the emails somehow
  @emails = resource.emails.map{|email| email.column_name}
  if action == :reset_password_instructions
    headers = {
      :subject       => translate(devise_mapping, action),
      :from          => mailer_sender(devise_mapping),
      :to            => @emails,
      :template_path => template_paths
    }
  else
    # otherwise send to the default email--or you can choose just send to all of them regardless of action.
    headers = {
      :subject       => translate(devise_mapping, action),
      :from          => mailer_sender(devise_mapping),
      :to            => resource.default_email,
      :template_path => template_paths
    }
  end

  if resource.respond_to?(:headers_for)
    headers.merge!(resource.headers_for(action))
  end

  unless headers.key?(:reply_to)
    headers[:reply_to] = headers[:from]
  end
  headers
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM