Rails 中的电子邮件确认,无需使用任何现有的身份验证 gem/插件
Posted
技术标签:
【中文标题】Rails 中的电子邮件确认,无需使用任何现有的身份验证 gem/插件【英文标题】:Email confirmation in Rails without using any existing authentication gems/plugins 【发布时间】:2011-04-28 10:49:51 【问题描述】:我正在 Rails 中开发此警报服务。实际上,我需要做的就是,当用户注册时,向用户发送一封确认电子邮件。并在用户确认后,激活用户。我尝试使用 Matt Hooks 的 Authlogic 电子邮件激活教程,但它真的无处可去。那么,有什么想法可以让我轻松做到这一点吗? 谢谢 !
更新
所以我是如何设计为我完成这项工作的:
安装 gem。
为设计的可确认字段创建迁移。
指定
设计:可确认 在你的模型中。
在相关控制器中创建一个确认方法(以及该方法的路由),该方法将更新相关模型的 confirm_at 属性。
设计生成器会为您创建一些视图,其中一个是confirmation_instructions.html.erb。在那里自定义路径。我使用的是 Rails 2.3.2,我已经将这种方法与 Authlogic 的身份验证一起使用,并且效果很好。我确实打算完全改用设计。
老实说,我想接受这两个答案(不幸的是我不能这样做),但这只是设计解决方案似乎更容易解决。
【问题讨论】:
您能否评论一下为什么选择了 Maran 的答案?我正准备这样做,但我正试图决定是从头开始(保罗的回答)还是使用插件。也许你可以分享你的经验。 当然,我已经更新了我的帖子并解释了我是如何让它工作的。 @Shreyas 所以你使用设计的唯一目的是确认账户?您已经准备好注册片了吗?我在问,因为我的应用程序中已经有注册文件,但我想添加确认,但只是那一个。 【参考方案1】:假设你肯定想避免使用 Devise、Authlogic 和朋友的标题,这就是我认为你需要做的事情:
在您的用户模型中创建“确认代码”和“确认”属性。 在需要用户 ID 和确认码的用户控制器上创建一个新的控制器方法,查找用户,然后检查参数中的代码是否与数据库中存储的代码匹配。如果是这样,它会清除代码并设置 Confirmed = true。 创建一个映射路径,例如/users/1/confirm/code 到你的新控制器方法。 为您要发送的电子邮件创建一个 ActionMailer 模板。这应该接受用户作为参数,并使用用户的确认码发送包含指向您的新路由的链接的邮件。 为您的用户模型创建一个观察者。如果创建了记录或者修改了e-mail地址,则生成一个随机确认码,设置到模型中并清除已确认标志。然后触发您的 ActionMailer。 创建一个帮助方法,允许视图检查当前用户是否被确认。 使用此方法可根据需要启用/禁用功能。请记住适当保护您的控制器方法以及您的视图逻辑。【讨论】:
您为什么建议避免使用电子邮件激活设计?我目前遇到了同样的问题,我已经设计了身份验证,但 mailgun 用于发送电子邮件,我目前正在探索我的选择 @TiagoOrnelasVieira 我并不是建议避免使用 Devise,但最初的问题指出这应该在没有 Devise/Authlogic 的情况下完成。问题似乎已更新。【参考方案2】:您还可以使用范围来选择用户。
class User < ActiveRecord::Base
scope :certified, where(:certified => true)
end
然后在你的代码中:
@user = User.certified.find_by_username(foo)
【讨论】:
【参考方案3】:Devise 是另一个出色的身份验证 gem,内置了电子邮件激活功能,也许你可以试一试。
【讨论】:
设计安装非常简单,完全符合您的需求。以上是关于Rails 中的电子邮件确认,无需使用任何现有的身份验证 gem/插件的主要内容,如果未能解决你的问题,请参考以下文章
用户确认电子邮件不发送到生产中。 Rails,Heroku,Gmail