我一直在查看 Rails 上的电子邮件激活示例,大多数示例只有一个用于激活令牌的列,并在其用户表中确认。我不确定,但我认为这不是一个好主意,因为当用户被激活时,几乎这两个列似乎都是浪费。我正在考虑进行激活的方式是拥有一个名为 Activation 的单独模型,该模型将是一种单向have_one :user
关联,我会将用户在我的站点中的角色设置为“PENDING”或类似的东西。激活表将为每个用户保存一个激活令牌。然后将使用激活令牌生成一个链接,并向用户发送一封包含类似内容的电子邮件www.mysite.com/activate?token='some_really_long_hash'
. 单击链接后,我的用户角色将设置为“会员”或类似的东西。这看起来是个好主意吗?我无法想象以这种方式激活的任何陷阱。建议?注释?
问问题
363 次
2 回答
2
听起来您正处于在用户模型上实现状态机设计模式的介绍阶段,不,这不是一种糟糕的设计方法。它只是比大多数人需要的复杂。
我认为状态机插件可能是您希望执行的方法类型。显然,这可能超出了您的预期,但方法是相同的。
另请查看这些帖子:
祝你好运!
于 2013-01-29T18:01:36.633 回答
1
最直接的方法是生成一个随机令牌并将其保存到用户或成员记录的列中。它不必“非常长”,20 个随机字符就足够了,因为猜测的可能性很小,永远不会发生。
通常,令牌仅用于验证用户一次,但如果用户随后单击电子邮件,如果它仍然重定向回他们的个人资料,那就太好了。
通常,用户会切换到“已验证”或类似的状态,即存储在单独列中的状态标志。这保留了它们的初始成员类型,这可能是许多值之一。这就是您经常看到validated_at
字段或banned_until
字段的原因。
于 2013-01-29T17:59:43.283 回答