2016-02-14 124 views
1

我有一个设计用户模型,我需要一个特殊的行为。代表他人设计注册用户(发送注册邮件)

每个用户都属于一家公司,我希望另一家公司用户'注册'一个新用户。

我首先想到的是使用设计的自我:创建一个新的RegistrationsController动作

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

那么该视图指向标准Devise::RegistrationsController#create

然后,我遇到了一个问题:就是图谋需要新注册用户未登录。

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

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

PS。我也考虑过邀请策略插件,但决定不使用它,因为我希望这两种方式都可以工作:1.手动注册,然后“同事”注册。我可能在这里错过了一些东西?

任何意见赞赏。

回答

1

我会为这种情况做一个自定义操作,我会发送company_idemail,并为新用户分配一个随机生成的密码。

接下来,用户保存后,我会使用devise中的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设置它,只有当被其他用户创建的这个帐户我将它设置为true。 在确认电子邮件模板中,我会检查generated_password是否为真,并显示附加信息以及临时密码。

此外,如果generated_password为true,则此字段可用于使控制器中的before_filter将用户始终重定向到change_password路径,并在更新密码时将其设置为false。

+0

在“现在,这里有两种方法,你会唱歌”这是一个错字。它是“符号”。 – sureshprasanna70

+0

非常感谢@ rmagnum2002。你的策略对我有用。将接受这个答案 –