gpt4 book ai didi

ruby-on-rails - 如何自定义 Devise 的 "resend confirmation email"

转载 作者:行者123 更新时间:2023-12-02 22:03:55 31 4
gpt4 key购买 nike

我有一个自定义邮件程序 (UserMailer.rb) 和一些方法来覆盖欢迎电子邮件和忘记密码电子邮件的默认 Devise 方法。邮件程序使用自定义模板来设置电子邮件的样式——效果很好。

config/initializers 中,我有一个文件

module Devise::Models::Confirmable
# Override Devise's own method. This one is called only on user creation, not on subsequent address modifications.

def send_on_create_confirmation_instructions
UserMailer.welcome_email(self).deliver
end

...
end

(同样,UserMailer 已设置好,非常适用于欢迎电子邮件和重置密码电子邮件。)

但不起作用的是“重新发送确认说明”选项。它使用默认的 Devise 样式发送,我希望它使用我的邮件布局的样式。我知道我可以手动将布局添加到默认的 Devise 布局,但我想保持 DRY 有效,而不必这样做。

我已经尝试覆盖 send_confirmation_instructions 方法 found here , 但我在 create(gem) devise-2.2.3/app/controllers/devise/confirmations_controller.rb

7 # POST /resource/confirmation
8 def create
9 self.resource = resource_class.send_confirmation_instructions(resource_params)

在我的初始化文件中,我可以通过为 Devise 添加一个新的覆盖来解决这个错误,但我可能没有正确地这样做:

module Devise::Models::Confirmable::ClassMethods
def send_confirmation_instructions
UserMailer.send_confirmation_instructions(self).deliver
end
end

有什么想法吗?

最佳答案

您不必通过该初始化程序来执行此操作。我通过覆盖确认 Controller 来完成此操作。我的设计路线如下:

devise_for :user, :path => '', :path_names => { :sign_in => 'login', :sign_out => 'logout', :sign_up => 'signup'}, 
:controllers => {
:sessions => "sessions",
:registrations => "registrations",
:confirmations => "confirmations"
}

然后,创建 confirmations_controller 并扩展 Devise::ConfirmationsController 以覆盖:

class ConfirmationsController < Devise::ConfirmationsController

在那个 Controller 中,我有一个创建方法来覆盖默认值:

def create

@user = User.where(:email => params[:user][:email]).first

if @user && @user.confirmed_at.nil?
UserMailer.confirmation_instructions(@user).deliver
flash[:notice] = "Set a notice if you want"
redirect_to root_url
else
# ... error messaging or actions here
end

end

显然,在 UserMailer 中,您可以指定将用于显示确认消息的 html/文本模板。 confirmation_token 应该是@user 模型的一部分,您可以使用它来创建具有正确 token 的 URL:

<%= link_to 'Confirm your account', confirmation_url(@user, :confirmation_token => @user.confirmation_token) %>

关于ruby-on-rails - 如何自定义 Devise 的 "resend confirmation email",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16422021/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com