alias_attribute和devise导致堆栈级别太深的错误

时间:2012-03-27 01:15:17

标签: ruby-on-rails devise stack-overflow

我遇到了遗留数据库的一些棘手问题。如果我只是将db中的“password”列名更改为“encrypted_pa​​ssword”,那么一切似乎都能正常工作;但是,我需要保留数据库。

所以我决定使用

alias_attribute :encrypted_password, :password

现在我在控制台中出现“堆栈级太深”的错误。

我的用户模型:

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

想法?谢谢!!! :)

1 个答案:

答案 0 :(得分:2)

我想这是因为设计保留单词password供自己使用(然后又调用encrypted_password。尝试将其重命名为pword并查看错误是否仍然存在如果没有,你将不得不找另一个名字来调用别名密码。

我应该说这只是一个假设。如果有帮助,请告诉我。