1

设计的示例和教程说我在用户模型中有这样的东西:

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

所以我对此有两个问题。

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

  2. 用户模型中的“password_confirmation”和“remember_me”等字段到底是做什么的?现在我可以写类似的东西User.find(1).password_confirmation,它可以工作,但完全没有意义。

如何处理?

4

2 回答 2

1

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

于 2012-07-15T07:15:32.703 回答
0

我想我找到了答案。

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

  2. 只要 Devise 剥夺了你定义我们的 attr-accessible 列表的权利,你可以做两件事:

    一种。您可以attr_readonly与 一起使用attr_accessible。它将为设计打开大门,但不会为您的其他表单打开大门,请阅读Make attributes mass assignable only during creation

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

于 2012-09-18T07:58:19.803 回答