當我的應用程序用戶註冊,他們必須確認他們的電子郵件防止用戶,搭載設計+ Rails的3Rails中,設計 - 從改變他們的電子郵件地址
的電子郵件地址定義了用戶的權限,所以我不不希望用戶在註冊後能夠更改它。如此刪除:來自users.rb的attr_accessible電子郵件,它爲登錄用戶工作,但現在用戶無法註冊。
什麼是正確的方法來處理這個問題?因此,用戶無法更新他們的電子郵件,但可以使用設計註冊他們的電子郵件。
感謝
當我的應用程序用戶註冊,他們必須確認他們的電子郵件防止用戶,搭載設計+ Rails的3Rails中,設計 - 從改變他們的電子郵件地址
的電子郵件地址定義了用戶的權限,所以我不不希望用戶在註冊後能夠更改它。如此刪除:來自users.rb的attr_accessible電子郵件,它爲登錄用戶工作,但現在用戶無法註冊。
什麼是正確的方法來處理這個問題?因此,用戶無法更新他們的電子郵件,但可以使用設計註冊他們的電子郵件。
感謝
我個人留下了attr_accessible:電子郵件和剛剛從編輯視圖中刪除的電子郵件領域。此外,您將希望從更新操作中去除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
謝謝,那個插件Rails 3友好嗎?它看起來並沒有多年被觸及。我真的很喜歡你的自定義驗證器的想法,似乎乾淨而簡單。你如何檢查new_record?介意如何做到這一點?謝謝 – AnApprentice 2010-11-16 03:52:00
attr_accessible呢? – AnApprentice 2010-11-16 03:55:59
@AnApprentice你說得對,不能擔保Rails3的兼容性。無論如何,自定義驗證器比以前更容易。 – 2010-11-16 04:11:02
attr_readonly:電子郵件
,可以輕鬆地解決了這個問題。
https://groups.google.com/forum/#!topic/plataformatec-devise/skCarCHr0p8
這聽起來很危險。 – AnApprentice 2010-11-16 03:51:04
不推薦。如果您忘記一次屏蔽電子郵件字段,則可能會出現漏洞或漏洞。 – 2010-11-16 04:09:44
是的,這只是一種考慮到他不會在其他地方擁有電子郵件領域的方法。 – raidfive 2010-11-16 18:43:45