Devise - Bloqueando O Acesso Do Usuário Ao Sistema

O Devise tem um método chamado active_for_authentication, o qual dá permissão ao usuário de logar no sistema. Vamos sobrescreve-lo no model User e assim termos o poder de bloquear um usuário. Antes de ir ao código vamos escrever o teste:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Test

require 'spec_helper'

describe Devise::SessionsController do
  include Devise::TestHelpers

  before do
    @user = Factory(:confirmed_user, :active => false)
    request.env["devise.mapping"] = Devise.mappings[:user]
  end

  it 'will not sign user in if not active' do
    post :create, :user => {:password => "password", :email => @user.email}
    controller.should_not be_user_active
  end
end

O teste simplesmente nos mostra uma mensagem se o usuario não tiver permissão de login, agora vamos coda. Criamos uma migration adicionando um campo com o nome de active do tipo boolean:

rails g migration Add_active_To_User active:boolean
rails rake db:migrate

Agora adicionamos o método active_for_authentication, bem como o inactive_message, que irá exibir uma mensagem se o usuário estiver bloquedo. Isso dentro do model User, não esqueça.

1
2
3
4
5
6
7
8
9
# User model

def active_for_authentication?
  active
end

def inactive_message
  "Sorry, this account has been deactivated."
end

Simples e fácil, agora é so fazer uma action para ficar mudando de false para true o campo active.

Comments