设计 - 使用密码重置机制限制注册?

时间:2013-01-03 07:05:41

标签: ruby-on-rails devise registration

我正在寻找一种允许私人注册或需要手动批准的注册的方法。后者可以使用here描述的策略来完成,但我认为如果我能以某种方式利用密码重置模块来简化流程(发送一次性的电子邮件),前一种方法可能会更方便使用令牌,但用于创建帐户)。有没有人尝试过这样的事情,或者可能有更好的策略来更好地利用设计中的现有组件?

可能相关:Ruby on rails: Devise, want to add invite code?

2 个答案:

答案 0 :(得分:2)

我不得不承认,我不喜欢在框架中使用专为其他用途设计的功能来实现其他目标。

当我想要私人注册时,我通常会做什么,你必须被邀请到应用程序是简单地将用户创建/注册放在应用程序中。毕竟Devise只是User模型上的身份验证机制。

因此,在我当前的应用程序中,应用程序内部有一种明确的方式可供现有用户邀请朋友。 邀请用户有一个表单,可以在Users表中为新人创建一个条目,其中包含他的电子邮件地址和一个告诉我用户是否已完成注册的字段。我创建了一个小的令牌,它也被保存到数据库中(SecureRandom.hex(8)是创建这样的令牌的好方法)。 系统向新人发送一封电子邮件,告诉他在哪里注册(带有包含令牌的URL),注册只是一个设置密码和其他字段的表单。

所有这些在Rails中都不是真正的魔力,它完全在所有2个控制器动作,2个视图和1个邮件程序中完成它,并且你决不受任何API Devise约束或不给你的约束。

我只需要确保Devise不会对尚未兑换其邀请令牌的用户进行身份验证,但就是这样。

当然不必编写注册视图很方便,但尤其是当您处理部分信息时(我的案例中的邀请用户必须填写有关新用户的一些信息),这些信息仅由新的用户补充用户可以很方便地使用常规表单,在那里你可以用它们做任何事情。

除非有人写一篇延伸Devise的Gem来做这件事,否则我认为我会坚持这种做法。

答案 1 :(得分:0)

原来有第三种策略 - 我可以简单地锁定新帐户(可锁定,before_create过滤器)并提供手动解锁功能。