2012-11-01 5 views
8

Desidero aggiungere una funzionalità di tipo di abbonamento nella mia domanda per gli utenti titolari di account in modo tale che dopo un intervallo di tempo prestabilito non saranno in grado di accedere al proprio account? Nota: non voglio cancellare il loro account dal database. Ho già installato devise-2.1.2 nella mia applicazione. Qualcuno ha qualche idea su come può essere fatto? Sono novizio a Ruby on rails quindi sarà molto utile per me se per favore spieghi i passaggi.Come bloccare gli utenti usando Devise?

risposta

18

Devise ha una soluzione Buil-in con il check :lockable opzione nel Devise Lockable Documentation

È necessario impostare il set lock_strategy a :failed_attempts.

Fase 1 Impostare il config/inizializzatori/devise.rb da usare:

# Defines which strategy will be used to lock an account. 
config.lock_strategy = :failed_attempts 

# Defines which key will be used when locking and unlocking an account 
config.unlock_keys = [ :time ] 

# Defines which strategy will be used to unlock an account. 
# :time = Re-enables login after a certain amount of time (see :unlock_in below) 
config.unlock_strategy = :time 

# Number of authentication tries before locking an account if lock_strategy 
# is failed attempts. 
config.maximum_attempts = 3 

# Time interval to unlock the account if :time is enabled as unlock_strategy. 
config.unlock_in = 2.hours 

Fase 2 tuo dovrebbe aggiungere il bloccabile a voi modello come questo:

class Example < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, 
     :lockable 

Fase 3 Generare le migrazioni per rendere il lavoro escogitare

class AddLockableToExamples < ActiveRecord::Migration 
    def change 
    add_column :examples, :failed_attempts, :integer, default: 0 
    add_column :examples, :unlock_token, :string 
    add_column :examples, :locked_at, :datetime 
    end 
end 

Saluti !!

+0

Desidero chiarire questa cosa nella mia mente che i "tentativi falliti" sono solo per quella situazione se qualche utente ha provato a registrarsi per un certo numero di volte. –

+0

Anche la documentazione dice che una strategia di tipo orario può essere utilizzata per bloccare un account. Quindi voglio dare l'abbonamento ad un utente per pochi mesi dopo di allora non appena l'abbonamento sarà finito, non sarà in grado di usare il suo account. È possibile? –

+0

Si blocca quando l'utente tenta x volte di accedere e può impostare unlock_strategy in tempo. Questo è quello che ti serve! – felipeclopes