巫术中的怪异attr_accessible

时间:2012-03-10 06:42:46

标签: ruby-on-rails ruby-on-rails-3

我正在使用Sorcery gem进行身份验证。我实际上没有任何问题地使用它是另一个项目,但我突然有一个奇怪的情况。我的模型是最初生成的巫术用户模型,没有任何attr_accessible。

现在,我有一个种子文件,如:

users = {

:hthought => {
  :username => 'jkjhkj',
  :email => 'hkjhk',
  :crypted_password => 'hkjhjkhk',
  :salt => 'hkjhjkhjh',
  :password => '57667'
}

}

users.each do |item, hash|  
    user = User.new(hash)
    user.save!
    hash.each do |attribute, value| 
        user.update_attribute(attribute, value)
    end
end

当我执行时(使用rake db:seed),我得到:

rake aborted!
Can't mass-assign protected attributes: crypted_password, salt

为什么?我真的不明白为什么我得到这个,因为我的用户模型中没有attr_accessible。此外,我在另一个项目中使用完全相同的代码,我从来没有得到过这个。

任何想法为什么?

2 个答案:

答案 0 :(得分:3)

如果您看到巫术代码(https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model.rb#L82),则可以看到:

attr_protected @sorcery_config.crypted_password_attribute_name, @sorcery_config.salt_attribute_name

因此有这种受保护的警告是正常的。

一年前,它在这个提交中添加了https://github.com/NoamB/sorcery/commit/7c2e846bf5c084bea72eb6477e72daf0177d789e

答案 1 :(得分:0)

它可能是一个Rails的东西,而不是一个巫术的东西。如果您是新应用程序正在使用Rails 3.2.3并且您的旧应用程序低于该应用程序,则可能是围绕attr_protected白名单的安全性收紧导致了不同的行为。这篇文章可能会有所帮助:)

Rails error: Can't mass-assign protected attributes