【问题标题】:Don't allow a user to change email address using devise with Rails不允许用户使用带有 Rails 的设计更改电子邮件地址
【发布时间】:2012-08-29 18:07:54
【问题描述】:

我使用devise 来允许用户登录网站。身份验证密钥设置为用户名,该用户名是唯一的。提供的电子邮件地址也是独一无二的。似乎不知何故devise 已经发现电子邮件地址应该是唯一的。所以这很好。

现在我想让人们更改他们的密码。我链接到我的edit_user_registration_path,但请注意允许用户更改他们的电子邮件地址。一种选择是将reconfirmable 设置为false...但我认为我根本不想允许用户更改他们的电子邮件地址。

我想我可以从devise 视图中删除该字段,但理论上精心设计的PUT 方法仍然可以让他们更改电子邮件地址。有没有办法阻止这个字段是可变的?还是让电子邮件地址可重新确认更好?

【问题讨论】:

  • 可以帮助这个链接stackoverflow.com/questions/1542524/…
  • 这很有帮助。正如我在另一个答案中提到的,我有点期望devise 直接处理这个问题(这样电子邮件地址的编辑框根本不会出现),而不是自己手动设置。我确定我在某处错过了一些简单的配置......

标签: ruby-on-rails ruby devise ruby-on-rails-3.2


【解决方案1】:

http://trak3r.blogspot.com/2007/03/immutable-activerecord-attributes.html

所以

class User
  def email=(address)
    if new_record?
      write_attribute(:email, address)
    else
      raise 'email is immutable!'
    end
  end 
end

【讨论】:

  • 有趣。虽然这肯定会阻止地址被更改,但我希望在devise 中有一些东西。这样,生成的视图不包含一个可编辑的文本框,其中包含不可变的内容。话虽如此,我认为如果我从视图中删除该框并使用此代码,这将起作用......
  • 是的,您必须编辑视图。我可能是错的,但我真的怀疑 Devise 是否为此内置了任何东西,因为这与身份验证无关,应该更像是一个 ActiveRecord 功能。
【解决方案2】:

在我的例子中,“答案”只是允许人们编辑他们的电子邮件地址。有足够多的用例可以让某人合法地想要更改他们的电子邮件地址,我认为尝试阻止它并没有什么坏处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    相关资源
    最近更新 更多