7

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

提前致谢

4

4 回答 4

13

我还没有发现 devise 是否符合您的要求(问题是指类似于 :password_confirmation 的第二个 :email_confirmation 字段,'confirmable' 似乎仅与确认链接有关)。我也必须这样做,并且我想出了如何使用内置的活动记录验证(rails 3.2.8,devise 2.1.2)来做到这一点:

  1. 在您的模型中添加到confirmation: true您的电子邮件验证和.:email_confirmationattr_accessible
  2. 在您的视图中添加一个:email_confirmation字段。

例如,在您的模型中(不假设其他验证或 attr_accessibles):

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

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

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

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

于 2012-08-21T19:57:29.083 回答
2

我面临着同样的问题。

这是我解决它的方法

来自官方 RailsGuide

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

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

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

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

email_confirmation仅当is not时才执行此检查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

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

根据我的实验,使用官方 RailsGuide

如果您想将确认消息更改为,必须正确给出电子邮件确认,然后使用这种方式添加消息选项:

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

就这样。

我希望这有帮助

于 2020-01-22T16:11:13.363 回答
0

与原始答案相比,新版本的 Rails 有一些细微差别。只是想我会添加这个以防它帮助其他人。

attr_accessorfor email_confirmation添加到您的模型并根据email_confirmation字段验证电子邮件字段。除非您已将电子邮件字段配置为区分大小写,否则在验证时将 case_sensitive 设置为 false 。{ case_sensitive: false }

app/models/user.rb

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

在注册参数上允许email_confirmation

app/controllers/users/registrations_controller.rb

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

email_confirmation字段添加到您的注册表单。

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

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= render 'devise/shared/error_messages', resource: resource %>

  <div class="field">
    <%= f.label :email %>
    <%= f.email_field :email, autofocus: true, autocomplete: 'email', required: true %>
  </div>

  <div class="field">
    <%= f.label :email_confirmation %>
    <%= f.email_field :email_confirmation, required: true %>
  </div>

  <!-- other fields -->
<% end %>
于 2020-04-16T18:30:59.737 回答
-3

假设您已安装 gem,当您执行此功能时:

rails generate devise:install

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

您所指的模块称为可确认的

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

如何使用 Devise 设置电子邮件确认?

于 2012-08-13T23:16:00.047 回答