设计gem和用户模型

时间:2012-07-15 06:21:44

标签: ruby-on-rails devise

Devise的示例和教程说我在User模型中有这样的东西:

attr_accessible :name, :password, :password_confirmation, :remember_me

所以我对此有两个问题。

  1. 为什么我可以访问“名称”和“密码”?我希望他们受到保护,是否设计让我改变这个?

  2. 在用户模型中,“password_confirmation”和“remember_me”这样的字段到底是做什么的?现在我可以写一些像User.find(1).password_confirmation这样的东西,它有效但根本没有任何意义。

  3. 如何处理?

2 个答案:

答案 0 :(得分:1)

您需要访问所有这四个字段才能创建登录和注册表单。您不必担心数据库中的密码字段,它们只是虚拟属性。您可以在架构中确认的数据库中的实际字段实际上是encrypted_pa​​ssword和salt。它实际上是一个功能强大,经过验证且安全的系统。您应该专注于创新应用程序的其余部分,并让设计为您完成工作,这非常好。

答案 1 :(得分:0)

我想我找到了答案。

  1. Devise使用了质量分配,你无能为力。有一个Github问题:https://github.com/plataformatec/devise/pull/718。我正在研究如何改变Devise以避免它依赖于质量分配。我很高兴知道你的意见。

  2. 只要Devise取消了您定义我们的attr可访问列表的权利,您就可以做两件事:

    一个。您可以将attr_readonlyattr_accessible一起使用。它将为Devise打开大门,但不会为您的其他形式打开,请阅读Make attributes mass assignable only during creation

    def mass_assignment_authorizer允许您定义动态attr可访问列表,请阅读http://railscasts.com/episodes/237-dynamic-attr-accessible?view=asciicast。恕我直言,这种方式对于这类问题来说太过分了。