Rails,Devise:用户的未知属性“密码”

时间:2017-05-14 14:57:24

标签: ruby-on-rails ruby devise model attributes

我一直在devise-two-factor用户模型上使用devise gem。当我尝试从模型中删除gem时,在创建用户记录时出现以下错误:

  

ActiveModel :: UnknownAttributeError:User的未知属性'password'。   c:/test_app/db/seeds.rb:6:in <top (required)>' bin/rails:4:in require'   bin / rails:4:在''

这是我之前在我的模型中设计的设计:

devise :registerable,
        :recoverable, :rememberable, :trackable, :validatable, :confirmable,
        :omniauthable,
        :invitable,
        :two_factor_authenticatable, :two_factor_backupable,
        :otp_secret_encryption_key => Settings.devise.two_factor.key,
        :omniauth_providers => [:google_oauth2]

我目前的整合:

devise :registerable,
        :recoverable, :rememberable, :trackable, :validatable, :confirmable,
        :omniauthable,
        :invitable,
        :omniauth_providers => [:google_oauth2]

我的种子:

demo_user = User.create(email: 'demo@example.com', first_name: 'demo', last_name: 'account', password: '12345678', username: 'demo')
demo_user.encrypted_password
demo_user.skip_confirmation!

如何删除这两行会影响模型的password属性?那段代码片段是我唯一改变过的。

2 个答案:

答案 0 :(得分:2)

demo_user = User.create(email: 'demo@example.com', first_name: 'demo',
                        last_name: 'account', password: '12345678',
                        username: 'demo')

有你的问题。您尝试在新password上设置User属性,但设计User模型没有password属性。

设计用户具有encrypted_password属性,但是在创建用户时由Devise生成,并且您可能不应该尝试自己填充它。它不是加密password属性的方法。

答案 1 :(得分:2)

two_factor_authenticatable的解释是:如果您的模型具有某种形式的:authenticatable,则Devise只能使用密码。 请尝试添加:database_authenticatable,而Devise应该能够正确分配密码。

如果这没有帮助,请参阅设计文档了解更多信息:https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview#using-omniauth-without-other-authentications