如何使用设计将掩码置于登录状态并将数据保存在DB上

时间:2016-03-17 11:59:06

标签: ruby-on-rails ruby ruby-on-rails-4 devise mask

我的登录表单和我的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上。 - - 因为我无法登录系统=(

2 个答案:

答案 0 :(得分:1)

检查this,它解释了before_validation如何运作

  

定义将在验证之前调用的回调   发生的情况。

它不会起作用,因为您正在尝试在登录操作中执行POST请求,而该操作不会调用before_validation。

我建议你做的是在通过js提交表单之前,或者在控制器中调用身份验证方法之前取消屏蔽值。

希望这有帮助!

答案 1 :(得分:0)

根据设计文档,一个好方法是覆盖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