Rails 中的电子邮件激活

Posted

技术标签:

【中文标题】Rails 中的电子邮件激活【英文标题】:Email Activation in rails 【发布时间】:2013-01-13 09:21:19 【问题描述】:

我一直在查看 Rails 上的电子邮件激活示例,大多数示例只有一个用于激活令牌的列,并在其用户表中确认。我不确定,但我认为这不是一个好主意,因为当用户被激活时,几乎这两个列似乎都是浪费。我正在考虑进行激活的方式是拥有一个名为 Activation 的单独模型,它将have_one :user 单向关联,我将用户在我的站点中的角色设置为“PENDING”或类似的东西。激活表将为每个用户保存一个激活令牌。然后将使用激活令牌生成一个链接,并向用户发送一封包含www.mysite.com/activate?token='some_really_long_hash' 之类的电子邮件。单击链接后,我的用户角色将设置为“会员”或类似的东西。这看起来是个好主意吗?我无法想象以这种方式激活的任何陷阱。建议?评论?

【问题讨论】:

【参考方案1】:

听起来您正处于在用户模型上实现状态机设计模式的介绍阶段,不,这不是一种糟糕的设计方法。它只是比大多数人需要的复杂。

我认为State Machine Plugin 可能是您希望执行的方法类型。显然,这可能超出了您的预期,但方法是相同的。

还可以查看这些帖子:

Why developers should be force-fed state machines why-developers-never-use-state-machines

祝你好运!

【讨论】:

【参考方案2】:

最直接的方法是生成一个随机令牌并将其保存到用户或成员记录的列中。它不必“非常长”,20 个随机字符就足够了,因为猜测的概率很小,永远不会发生。

通常,令牌仅用于验证用户一次,但如果用户随后单击电子邮件,如果它仍然重定向回他们的个人资料,那就太好了。

通常,用户会切换到“已验证”或类似的状态,即存储在单独列中的状态标志。这保留了它们的初始成员类型,这可能是许多值之一。这就是您经常看到validated_at 字段或banned_until 字段的原因。

【讨论】:

以上是关于Rails 中的电子邮件激活的主要内容,如果未能解决你的问题,请参考以下文章

Rails - SendGrid - 无效响应错误

Michael Hartl Rails 教程第 11 和 12 章:多个错误和邮件未发送

从 Rails 2 到 Rails 3 路由

Michael Hartl的Rails教程第11章和第12章:多个错误和邮件未被发送

允许管理员激活或停用用户——Rails

Postmark::InvalidMessageError 尝试发送邮件时