【问题标题】:alias_attribute and devise causing stack level too deep erroralias_attribute 和设计导致堆栈级别太深错误
【发布时间】:2012-04-10 13:05:13
【问题描述】:

我在使用旧版数据库时遇到了一些稍微棘手的问题。如果我只是将数据库中的“密码”列名更改为“加密密码”,一切似乎都可以正常工作;但是,我需要保留数据库。

所以我决定使用

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

想法?谢谢!!! :)

【问题讨论】:

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


    【解决方案1】:

    我想这是由于设计保留单词 password 以供自己使用(然后它又调用 encrypted_password。尝试将其重命名为 pword 并查看错误是否仍然存在。如果没有t,您必须找到另一个名称来调用别名密码。

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

    【讨论】:

    • 那么,这给了我“NoMethodError(未定义的方法`pword = ...)”,这是有道理的......有什么解决方法的想法吗?有没有办法在mysql中为列名创建别名?
    • 我知道别名的唯一方法是你一直在做的方式(有关更多信息,请参阅此问题:stackoverflow.com/questions/4014831/…)。您是否将 pword 添加到 attr_accessible?如果你这样做了,但仍然出现错误,你可以尝试通过蛮力实现别名(手动创建 get/set 方法)。
    • 谢谢!在我们可以更改数据库之前,我的临时解决方案是简单地复制 db 字段并将其命名为 encrypted_pa​​ssword。这似乎有效。最终密码将被逐步淘汰。所以我认为我们很好。
    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多