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

Shr*_*yas 33 ruby-on-rails email-validation

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

UPDATE

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

  1. 安装宝石.

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

  3. 指定

    设计:在您的模型中确认.

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

  5. 设计生成器为您创建了一些视图,其中一个是confirmation_instructions.html.erb.自定义那里的路径.

我使用了Rails 2.3.2,并且我使用了这种方法以及Authlogic的身份验证,它运行良好.我打算完全切换到设计.

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

Pau*_*ell 73

假设你肯定想要避免使用Devise,Authlogic和朋友,这就是我认为你需要做的事情:

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


小智 5

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

class User < ActiveRecord::Base
  scope :certified, where(:certified => true)
end
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中:

@user = User.certified.find_by_username(foo)
Run Code Online (Sandbox Code Playgroud)