我的解决方案是扩展/覆盖 Devise 的密码控制器。为此,创建一个从 Devise 的密码控制器继承的控制器(我们称之为密码),如下所示:
class PasswordsController < Devise::PasswordsController
然后编辑您的路线文件,使此更改生效:
devise_for :users, :controllers => { :passwords => 'passwords' }
现在,您将要覆盖create
action。有几种方法可以做到这一点,但由于我不确定你想做什么,我将向你展示你可以做的 2 件事:
您只想防止“找不到电子邮件”错误,以便人们无法找到您的数据库中存在或不存在哪些电子邮件:
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
您真的想向任何输入的电子邮件发送电子邮件:
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
现在,最后一个解决方案的问题是您正在向不存在的用户发送电子邮件......所以当用户回来时,他将无法输入他的新密码,因为他的用户帐户可以找不到。但如果你真的想这样做,希望我能让你走上正确的轨道。