2012-11-01 6 views
8

Ich möchte in meiner Anwendung eine Abonnementfunktion für die Benutzer des Kontoinhabers hinzufügen, so dass sie nach einem festgelegten Zeitraum nicht auf ihr Konto zugreifen können. Hinweis: Ich möchte ihren Account nicht aus der Datenbank löschen. Ich habe bereits devise-2.1.2 in meiner Anwendung installiert. Hat irgendjemand eine Idee, wie kann es gemacht werden? Ich bin Neuling zu Ruby on rails so wird es sehr hilfreich sein, wenn Sie bitte die Schritte erklären.Wie sperren Benutzer mit Devise?

Antwort

18

Devise haben eine Buil-in-Lösung mit der :lockable Option zur Überprüfung der in der Devise Lockable Documentation

Sie haben, um den lock_strategy Satz :failed_attempts.

Schritt 1 Stellen Sie Ihre config/initializers/devise.rb zu verwenden:

# 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 

Schritt 2 Ihr sollte die abschließbare Sie Modell, da dies hinzufügen:

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

Schritt 3 die Migrationen Arbeit

machen devise generieren zu
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 

Grüße !!

+0

Ich möchte diese Sache in meinem Kopf löschen, dass "gescheiterte Versuche" nur für diese Situation sind, wenn ein Benutzer versucht hat, sich für eine bestimmte Anzahl von Zeiten anzumelden. –

+0

Die Dokumentation besagt auch, dass eine Zeittypstrategie zum Sperren eines Kontos verwendet werden kann. Daher möchte ich einem Benutzer ein Abonnement für einige Monate danach gewähren, sobald das Abonnement vorbei ist, kann er sein Konto nicht benutzen. Ist das möglich? –

+0

Es wird gesperrt, wenn der Benutzer x mal versucht, sich anzumelden, und Sie können die unlock_strategy auf Zeit setzen. Das brauchst du! – felipeclopes