在Rails中确认电子邮件,而不使用任何现有的身份验证gem /插件

时间:2010-10-21 06:50:44

标签: ruby-on-rails email-validation

我正在使用Rails中的这个警报服务。实际上,我需要做的就是,当用户注册时,向用户发送确认电子邮件。在用户确认后,激活用户。我试着玩Matt Hooks的Authlogic电子邮件激活教程,但它确实无处可去。所以,任何想法我怎么能以最小的忙乱做到这一点? 谢谢 !

更新

所以我如何设计为我做的工作是:

  1. 安装gem。

  2. 为设计的可确认字段创建迁移。

  3. 指定

    设计:确认 在你的模特中。

  4. 在相关控制器(以及该方法的路径)中创建一个确认方法,该方法将更新相关模型的confirmed_at属性。

  5. 设计生成器会为您创建一些视图,其中一个是confirmation_instructions.html.erb。自定义那里的路径。
  6. 我使用了Rails 2.3.2并且我使用了这种方法以及Authlogic的身份验证,它运行良好。我打算完全切换到设计。

    说实话,我想接受这两个答案(遗憾的是我不能这样做),但只是设计解决方案似乎更容易解决。

3 个答案:

答案 0 :(得分:71)

假设标题是你绝对想要避免Devise,Authlogic和朋友,这就是我认为你需要做的事情:

  • 在您的用户模型中创建“确认代码”和“已确认”属性。
  • 在用户控制器上创建一个需要用户ID和确认码的新控制器方法,查找用户,然后检查参数中的代码是否与存储在DB中的代码匹配。如果是这样,它会清除代码并设置confirm = true。
  • 创建一个映射的路线,例如/ users / 1 / confirm / code to your new controller method。
  • 为要发送的电子邮件创建ActionMailer模板。这应该接受用户作为参数,并使用用户的确认码发送包含新路线链接的邮件。
  • 为您的用户模型创建一个观察者。如果创建了记录或修改了电子邮件地址,则生成随机确认代码,将其设置到模型中并清除已确认的标志。然后触发你的ActionMailer。
  • 创建一个帮助方法,允许视图检查当前用户是否已确认。
  • 使用此方法根据需要启用/禁用功能。请记住保护您的控制器方法以及视图逻辑。

答案 1 :(得分:5)

您还可以使用范围来选择用户。

class User < ActiveRecord::Base
  scope :certified, where(:certified => true)
end

然后在你的代码中:

@user = User.certified.find_by_username(foo)

答案 2 :(得分:4)

Devise是另一个出色的身份验证宝石,内置了电子邮件激活功能,也许你可以试一试。