RAILS 3.2&设计:电子邮件确认文本字段?

时间:2012-08-13 21:05:42

标签: ruby-on-rails devise

我正在使用Rails 3.2和Devise。我想知道Devise是否提供了“电子邮件(地址)确认”字段,就像密码确认一样,用户输入密码字段,然后在网站发出确认电子邮件或处理注册登记之前输入密码确认字段。如果没有,我是否必须添加email_confirmation并验证用户模型(在rails g devise User之后)?

提前致谢

4 个答案:

答案 0 :(得分:12)

我没有发现设计是否符合你的要求(问题是指第二个:email_confirmation字段类似于:password_confirmation,'确认'似乎只与确认链接有关)。我也必须这样做,我想出了如何使用内置主动记录验证(rails 3.2.8,设计2.1.2):

  1. 在您的模型中,将confirmation: true添加到您的电子邮件验证中,将:email_confirmation添加到attr_accessible
  2. 在您的视图中添加:email_confirmation字段。
  3. 例如,在您的模型中(不假设其他验证或attr_accessibles):

    attr_accessible :email, :email_confirmation
    validates :email, confirmation: true
    

    将使用内置主动记录'确认'验证(与密码相同)。最后,在您的视图中,您需要添加以下内容:

    <div><%= f.label :email_confirmation %>
    <%= f.email_field :email_confirmation %></div>
    

    可能有一种更清洁的方式,但这对我有用。然而,到目前为止我唯一的设计经验就是将它添加到现有模型中时,我没有在为你生成模型时使用它(可能它大致相同)。

答案 1 :(得分:2)

我遇到了同样的问题。

这是我解决的方式

From the official RailsGuide

当两个文本字段应接收完全相同的内容时,应使用此帮助程序。例如,您可能要确认电子邮件地址或密码。该验证将创建一个虚拟属性,该虚拟属性的名称是必须在其后附加“ _confirmation”的字段名称。

class Person < ApplicationRecord
  validates :email, confirmation: true
end

在您的视图模板中,您可以使用类似的

<%= text_field :person, :email %>
<%= text_field :person, :email_confirmation %>

仅当email_confirmation不是nil时才执行此检查。要要求确认,请确保为确认属性添加一个状态检查(我们将在本指南后面的presence中进行查看):

class Person < ApplicationRecord
  validates :email, confirmation: true
  validates :email_confirmation, presence: true
end

还有一个:case_sensitive选项,可用于定义确认约束是否区分大小写。此选项默认为true。

class Person < ApplicationRecord
  validates :email, confirmation: { case_sensitive: false }
end

此帮助程序的默认错误消息是“ 与确认不符”。

根据我的实验,使用official RailsGuide

如果您想更改确认消息,例如必须正确提供电子邮件确认,然后使用添加消息选项,如下所示:

class Person < ApplicationRecord
  validates :email, confirmation: true
  validates :email_confirmation, presence: { message: "must be given correctly" }
end

仅此而已。

我希望这会有所帮助

答案 2 :(得分:0)

与原始答案相比,较新版本的Rails略有不同。只是想想我会添加它,以防其他任何人使用。

为模型中的 email_confirmation 添加/* Font Awesome */ $fa-font-path: '~@fortawesome/fontawesome-free/webfonts'; @import '~@fortawesome/fontawesome-free/scss/fontawesome'; @import '~@fortawesome/fontawesome-free/scss/solid'; @import '~@fortawesome/fontawesome-free/scss/regular'; @import 'bootstrap-datepicker/dist/css/bootstrap-datepicker.css'; ,并根据 email_confirmation 字段验证 email 字段。除非您将电子邮件字段配置为区分大小写,否则在验证中将case_sensitive设置为false attr_accessor

{ case_sensitive: false }

app/models/user.rb

在注册参数上允许电子邮件确认

class User < ApplicationRecord attr_accessor :email_confirmation validates :email, confirmation: { case_sensitive: false } end

app/controllers/users/registrations_controller.rb

在您的注册表单中添加电子邮件确认字段。

def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up, keys: [:email_confirmation]) end

app/views/devise/registrations/new.html.erb

答案 3 :(得分:-3)

假设你安装了gem,当你执行这个功能时:

rails generate devise:install

它将生成您的迁移文件,其中包含您需要按照您所指的方向前往的email_confirmation内容。您所要做的就是将其评论出来。否则,我会注释掉我不需要的所有其他内容。

您所指的模块称为可确认

假设你还没有找到这个,这个链接将解释其余部分:

How do I set up email confirmation with Devise?