代表他人设计注册用户(发送注册电子邮件)

时间:2016-02-14 10:12:49

标签: ruby-on-rails devise

我有一个设计用户模型,我需要一个特殊的行为。

每个用户都属于一家公司,我希望其他公司用户“注册”新用户。

我的第一个想法是使用设计自我:创建一个新的RegistrationsController动作

def new_company_user
  build_resource(company_id: params[:company_id])
  # ... 
end

然后视图将指向标准Devise::RegistrationsController#create

然后我遇到了一个问题:该Devise需要一个新的注册用户才能登录。

所以,可能还有另一种方式。

如果我自己创建用户,如何触发Devise向新创建的用户发送注册电子邮件?

PS。我也考虑了邀请策略插件,但决定不使用它,因为我想要两种方式工作:1。手动注册,“同事”注册。我可能在这里遗漏了什么?

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

我会针对此情况执行自定义操作,我会发送company_idemail,并为新用户分配随机生成的密码。

接下来,在用户保存后,我会使用设计中提供的send_confirmation_instructions方法。

require 'securerandom'

def custom_action
  user = User.new(user_params)
  user.password = SecureRandom.hex #5b5cd0da3121fc53b4bc84d0c8af2e81
  if user.save
   user.send_confirmation_instructions
  else
   # redirect or..
  end
end

用户将收到确认其帐户的电子邮件。 现在,这里有两种方式,你要么在确认后直接给他签名,而且你需要以某种方式让他改变他现在的密码要么他需要通过登录表格,要求发送由用户使用的确认邮件生成的密码。然后他还得改变他的密码。 :)

  

如何在电子邮件中发送临时密码或让用户更改   他的密码?

我向用户添加了一个名为generated_password的布尔字段并默认设置为false,并且只有当此帐户由其他用户创建时我才会设置它为真。 在确认电子邮件模板中,我检查generated_password是否为真,而不是显示其他信息以及临时密码。

此字段也可用于在控制器中创建before_filter,以便在generated_password为真时将用户始终重定向到change_password路径,并在更新密码时将其设置为false。