Utilisation du congise 2.1.2 et Rails 3.2.6
Je fais ce Q &a Juste au cas où d'autres rencontrent ce problème car j'ai trouvé une documentation peu et dispersée pour cela.
Cette erreur peut se produire si vous essayez de configurer Devise
comme verrouillable.
undefined local variable or method `locked_at' for [someClass]
Cela signifie que votre modèle n'a pas les attributs appropriés.
Prérequis: Configurez les éléments suivants dans Config/Initialiseurs/Devise.RB
# ==> Configuration for :lockable
# Defines which strategy will be used to lock an account.
# :failed_attempts = Locks an account after a number of failed attempts to sign in.
# :none = No lock strategy. You should handle locking by yourself.
config.lock_strategy = :failed_attempts
# Defines which key will be used when locking and unlocking an account
config.unlock_keys = [ :email ]
# Defines which strategy will be used to unlock an account.
# :email = Sends an unlock link to the user email
# :time = Re-enables login after a certain amount of time (see :unlock_in below)
# :both = Enables both strategies
# :none = No unlock strategy. You should handle unlocking by yourself.
config.unlock_strategy = :email
# Number of authentication tries before locking an account if lock_strategy
# is failed attempts.
config.maximum_attempts = 20
# Time interval to unlock the account if :time is enabled as unlock_strategy.
# config.unlock_in = 1.hour
Configurez votre modèle pour inclure devise :lockable
:
class Example < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :lockable
Simplement décompressez ces chaînes dans la migration du congé:
## Lockable
# t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
Devise
nécessite ces trois attributs sur votre modèle. Par conséquent, génèverez la migration suivante et exécutez-la.
class AddLockableToExamples < ActiveRecord::Migration
def change
add_column :examples, :failed_attempts, :integer, default: 0
add_column :examples, :unlock_token, :string # Only if unlock strategy is :email or :both
add_column :examples, :locked_at, :datetime
end
end
J'espère que cela sauver quelqu'un d'autre heure de Google-Fu.