2012-07-10 135 views
2

我正在构建一个多租户应用程序。当用户创建帐户时,他们需要输入电子邮件+密码。登录后,该用户(“管理员”)可以将其他用户添加到他们的帐户。我希望能够添加简单的用户 - 只需要一个电子邮件地址。下列过程对于添加用户是否安全?多租户,这个过程是否安全添加用户?

  1. 管理员去添加用户形式
  2. 管理员进入用户的电子邮件地址,并点击提交
  3. 电子邮件+独特registration_key + registration_expiration被输入到用户模型
  4. 新用户发送一封电子邮件,链接注册(如:http://account.myapp.com/registration/o4iwerl23msl424keree
  5. 新用户打开注册表并输入所需的密码+ password_confirmation字段
  6. 如果URL中的registration_key匹配on e,在注册期满之前,用户可以注册

您会推荐一种替代方案吗?如果这是安全的,我如何绕过此过程的步骤2 & 3中所需的密码+ password_confirmation字段?

+0

您使用的是什么认证系统? – 2012-07-10 16:19:50

+0

没有认证系统 - 滚动我自己的。 – hugo 2012-07-10 16:36:12

+0

@JesseWolgamott:我编辑了我的问题并添加了第6步。 – hugo 2012-07-10 16:44:48

回答

2

似乎对我来说足够合理。

我会为用户模型添加一个状态列。当你邀请他人时,他们的陈述将被邀请,直到他们点击注册链接并完成所有这些事情。

然后你可以设置密码(或其他任何不相关的,在这个阶段)的验证,以在此情况下

validates_presence_of :blah, :if => confirmed? 

def confirmed? 
    state == 'confirmed' 
end 

这也可能会派上用场适用,如果用户想看到哪个邀请用户成功注册。如果你的用户会有很多状态,你可能想看看aasm宝石,但是这对于这个问题来说可能是过度的。