Ruby on rails Rails,Desive-防止用户更改其电子邮件地址
当用户在我的应用程序上注册时,他们必须通过Desive+Rails 3确认他们的电子邮件 电子邮件地址定义了用户的权限,因此我不希望用户在注册后能够对其进行更改。因此删除:可以访问users.rb attr_的电子邮件,该邮件对登录用户有效,但现在用户的无法注册 正确的处理方法是什么?因此,用户不能更新他们的电子邮件,但可以使用Desive注册他们的电子邮件Ruby on rails Rails,Desive-防止用户更改其电子邮件地址,ruby-on-rails,ruby-on-rails-3,devise,Ruby On Rails,Ruby On Rails 3,Devise,当用户在我的应用程序上注册时,他们必须通过Desive+Rails 3确认他们的电子邮件 电子邮件地址定义了用户的权限,因此我不希望用户在注册后能够对其进行更改。因此删除:可以访问users.rb attr_的电子邮件,该邮件对登录用户有效,但现在用户的无法注册 正确的处理方法是什么?因此,用户不能更新他们的电子邮件,但可以使用Desive注册他们的电子邮件 谢谢我个人会让attr_可用于:email,只需从编辑视图中删除email字段。此外,您还需要在更新操作中从params散列中删除任何电子
谢谢我个人会让attr_可用于:email,只需从编辑视图中删除email字段。此外,您还需要在更新操作中从params散列中删除任何电子邮件参数。这是自定义验证器的最佳情况。自从Rails3以来,它们比以前容易多了
class ImmutableValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record.errors[attribute] << "cannot be changed after creation" if record.send("#{attribute}_changed?") && !record.new_record?
end
end
class User < ActiveRecord::Base
validates :email, :immutable => true
end
类ImmutableValidator
属性只读:电子邮件
这很容易就解决了问题
听起来很危险。不建议这样做。如果你忘记屏蔽电子邮件字段一次,你就有一个潜在的bug或漏洞。是的,这只是一种方法,考虑到他不会在其他地方有电子邮件字段。谢谢,这个插件对Rails 3友好吗?看起来已经好几年没碰过了。我真的很喜欢你的自定义验证器的想法,看起来干净简单。你如何检查新记录?介意告诉我怎么做吗?thanks@AnApprentice你说得对,不能保证Rails3的兼容性。不管怎样,自定义验证器比以前容易多了。@AnApprentice忘记了脏属性检查。现在应该可以工作了。难道“validates:email,:on=>:update,:immutable=>true”比自定义验证器中的新记录检查更好吗?它使代码更具可读性。@acidburn2k
:on=>:update
设置是不可变的,因此要求用户提供它没有任何意义。我很乐意用稍微难看一点的实现来换取更好的API,因为实现更容易更改。