我正在使用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。此外,我在另一个项目中使用完全相同的代码,我从来没有得到过这个。
任何想法为什么?
答案 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白名单的安全性收紧导致了不同的行为。这篇文章可能会有所帮助:)