Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 代表他人设计注册用户(发送注册电子邮件)_Ruby On Rails_Devise - Fatal编程技术网

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

Ruby on rails 代表他人设计注册用户(发送注册电子邮件),ruby-on-rails,devise,Ruby On Rails,Devise,我有一个Desive用户模型,我需要一个特殊的行为 每个用户都属于一个公司,我希望另一个公司用户“注册”一个新用户 我的第一个想法是使用Desive self:创建一个新的注册控制器动作 def new_company_user build_resource(company_id: params[:company_id]) # ... end 然后,视图将指向标准的design::RegistrationsController#create 然后我遇到了一个问题:该设计要求新的注册用

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

每个用户都属于一个公司,我希望另一个公司用户“注册”一个新用户

我的第一个想法是使用Desive self:创建一个新的注册控制器动作

def new_company_user
  build_resource(company_id: params[:company_id])
  # ... 
end
然后,视图将指向标准的
design::RegistrationsController#create

然后我遇到了一个问题:该设计要求新的注册用户不能登录

所以,可能还有另一种方法

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

另外,我也考虑了邀请策略插件,但决定不使用它,因为我希望两种方法都能起作用:1。手动注册和“同事”注册。我可能遗漏了什么


感谢您的建议。

对于这种情况,我会做一个自定义操作,发送
公司id
电子邮件
,并为新用户分配随机生成的密码

接下来,在保存用户后,我将使用designe中可用的
send\u confirmation\u指令
方法

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\u password
的布尔字段,并在默认情况下将其设置为false,只有当其他用户创建此帐户时,我才会将其设置为true。 在确认电子邮件模板中,我会检查生成的密码是否为真,然后显示附加信息和临时密码


此外,如果
生成的\u密码
为真,则此字段可用于在控制器中进行前\u筛选,以重定向用户始终更改\u密码路径,并在更新密码时将其设置为假。

在“Now,这里有两种方式,要么你唱歌”。这是“签名”。非常感谢@rmagnum2002。你的策略对我有用。我会接受这个答案