如何使用设计在登录时设置掩码并仅在数据库中保存数字
How put mask on login with devise and save on DB just numbers
我有我的登录表单和我的 js 掩码,一切正常。但是我把代码放在哪里:
cpf.gsub!(/(\.|\-)/, "")
面具工作?
我需要生成设备的控制器用于登录还是仅用于模型?我需要用户模型:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
before_validation do
self.cpf.gsub!(/(\.|\-)/, "")
end
end
但它只适用于注册用户,不要登录。
我的登录名是这样的:
<div class="login">
<div class="panel panel-default">
<div class="panel-heading"><h4 class="cor-texto">AUTENTICAÇÃO DO USUÁRIO</h4></div>
<div class="panel-body">
<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="form-inputs">
<div class="form-group">
<%= f.input :cpf, required: false, autofocus: true, input_html: { class: 'form-control mascara-cpf' }, placeholder: 'LOGIN', label: false %>
</div>
<div class="form-group">
<%= f.input :password, required: false, input_html: { class: 'form-control' }, placeholder: 'SENHA', label: false %>
</div>
<div class="espaco-check-box-login">
<%= f.input :remember_me, label: 'Lembre-me', as: :boolean if devise_mapping.rememberable? %>
</div>
</div>
<div class="form-actions">
<%= f.button :submit, "Log in", :class => "btn btn-default btn-lg btn-block" %>
</div>
<% end %>
</div>
</div>
</div>
我的面具工作成形式,但保存在 DB 上。和 - 因为我无法登录系统 =(
查看 this,它解释了 before_validation
的工作原理
Defines a callback that will get called right before validation
happens.
它不会工作,因为您正尝试在登录操作中执行 POST 请求,这不会调用 before_validation。
我建议你做的是在通过 js 提交表单之前,或者在你的控制器中调用身份验证方法之前取消屏蔽值。
希望对您有所帮助!
根据设计文档,一个好方法是,在您的 user.db 中覆盖登录查询,例如:
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
if cpf = conditions.delete(:cpf)
logger.debug cpf.gsub!(/[^\d]/, '')
where(conditions).where(["cpf = :value", { :value => cpf }]).first
end
我有我的登录表单和我的 js 掩码,一切正常。但是我把代码放在哪里:
cpf.gsub!(/(\.|\-)/, "")
面具工作?
我需要生成设备的控制器用于登录还是仅用于模型?我需要用户模型:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
before_validation do
self.cpf.gsub!(/(\.|\-)/, "")
end
end
但它只适用于注册用户,不要登录。 我的登录名是这样的:
<div class="login">
<div class="panel panel-default">
<div class="panel-heading"><h4 class="cor-texto">AUTENTICAÇÃO DO USUÁRIO</h4></div>
<div class="panel-body">
<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="form-inputs">
<div class="form-group">
<%= f.input :cpf, required: false, autofocus: true, input_html: { class: 'form-control mascara-cpf' }, placeholder: 'LOGIN', label: false %>
</div>
<div class="form-group">
<%= f.input :password, required: false, input_html: { class: 'form-control' }, placeholder: 'SENHA', label: false %>
</div>
<div class="espaco-check-box-login">
<%= f.input :remember_me, label: 'Lembre-me', as: :boolean if devise_mapping.rememberable? %>
</div>
</div>
<div class="form-actions">
<%= f.button :submit, "Log in", :class => "btn btn-default btn-lg btn-block" %>
</div>
<% end %>
</div>
</div>
</div>
我的面具工作成形式,但保存在 DB 上。和 - 因为我无法登录系统 =(
查看 this,它解释了 before_validation
的工作原理
Defines a callback that will get called right before validation happens.
它不会工作,因为您正尝试在登录操作中执行 POST 请求,这不会调用 before_validation。
我建议你做的是在通过 js 提交表单之前,或者在你的控制器中调用身份验证方法之前取消屏蔽值。
希望对您有所帮助!
根据设计文档,一个好方法是,在您的 user.db 中覆盖登录查询,例如:
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
if cpf = conditions.delete(:cpf)
logger.debug cpf.gsub!(/[^\d]/, '')
where(conditions).where(["cpf = :value", { :value => cpf }]).first
end