如何使用Devise实现用户注册完成后自动发送欢迎邮件
问题根因
- 自定义的
RegistrationsController未生效:从请求日志可以看到,注册的POST请求是由默认的Devise::RegistrationsController处理的,你编写的控制器代码根本没有被调用。 - 控制器
create方法逻辑错误:即便控制器生效,现有代码也无法正常触发邮件发送:- Devise默认的
create方法执行后会直接返回重定向,写在super后面的代码不会被执行 - 你手动新实例化的
@user = User.new(user_params)不是实际已注册成功的用户对象,完全没有必要单独创建
- Devise默认的
解决方案
第一步:修改路由配置指向自定义控制器
打开config/routes.rb,修改devise路由配置:
devise_for :users, controllers: { registrations: 'registrations' }
第二步:修正注册控制器的create方法逻辑
class RegistrationsController < Devise::RegistrationsController def create # 块内逻辑仅在用户创建成功后执行,避免创建失败时还尝试发邮件 super do |resource| UserMailer.welcome_email(resource).deliver_now if resource.persisted? end end private def after_sign_up_path_for(resource) static_pages_welcome_path end def user_params # 注意你请求参数里有role_names,有需要的话补充到permit列表里 params.require(:user).permit(:email, :password, :password_confirmation, :broker, :buyer, :status, role_names: []) end end
改完重启服务测试即可,配置正确的情况下注册成功就会触发欢迎邮件发送。
内容的提问来源于stack exchange,提问作者sa0irxe
相关产品推荐
相关产品推荐

