I am running into some slightly tricky issues with a legacy db. Everything seems to work fine if I simply change the “password” column name in the db to “encrypted_password”; however, I need to leave the db in place.
So I decided to use
alias_attribute :encrypted_password, :password
Now I get a “stack level too deep” error in the console.
My user model:
class User < ActiveRecord::Base
require "digest/sha1"
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :encryptable, :encryptor => :old_cakephp_auth
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
has_many :events
before_create :add_default_values
#alias_attribute :created_at, :created
#alias_attribute :updated_at, :updated
alias_attribute :encrypted_password, :password
def add_default_values
self.created = Time.now
self.updated = Time.now
self.image = ""
self.name = self.email.split("@").first
#make normal user
self.role_id = 2
self.username = self.email.split("@").first + rand(100000000000000).to_s
self.website = ""
end
def valid_password?(password)
return false if encrypted_password.blank?
Devise.secure_compare(Digest::SHA1.hexdigest(self.password_salt+password), self.encrypted_password)
end
end
Ideas? Thanks!!! 🙂
I imagine that this is due to devise reserving the word
passwordfor their own use (and it in turn callingencrypted_password. Try renaming it topwordand see if the error still occurs. If it doesn’t, you’ll have to find another name to call the aliased password.I should say that this is just an assumption. Let me know if it helps.