Search code examples
ruby-on-railsrubyruby-on-rails-4devisemask

How put mask on login with devise and save on DB just numbers


I have my login form, and my js mask, all ok. But where I put the code:

cpf.gsub!(/(\.|\-)/, "")

For mask work?

I need generate devise's controller for put on login or just model? I need User model:

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

But it just work with registration user, dont login. My login is this:

<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>

My mask work into form, but save on DB with . and -, because this I cant sign in on system =(


Solution

  • Check this out, it explains how before_validation works

    Defines a callback that will get called right before validation happens.

    It won't work because you're trying to do a POST request in a login action, which will not call the before_validation.

    What I recommend you to do is unmask the value before the form gets submitted via js, or before the authentication method is called inside your controller.

    Hope this helps!