2010-11-16 80 views
2

當我的應用程序用戶註冊,他們必須確認他們的電子郵件防止用戶,搭載設計+ Rails的3Rails中,設計 - 從改變他們的電子郵件地址

的電子郵件地址定義了用戶的權限,所以我不不希望用戶在註冊後能夠更改它。如此刪除:來自users.rb的attr_accessible電子郵件,它爲登錄用戶工作,但現在用戶無法註冊。

什麼是正確的方法來處理這個問題?因此,用戶無法更新他們的電子郵件,但可以使用設計註冊他們的電子郵件。

感謝

回答

0

我個人留下了attr_accessible:電子郵件和剛剛從編輯視圖中刪除的電子郵件領域。此外,您將希望從更新操作中去除params散列中的任何電子郵件參數。

+1

這聽起來很危險。 – AnApprentice 2010-11-16 03:51:04

+1

不推薦。如果您忘記一次屏蔽電子郵件字段,則可能會出現漏洞或漏洞。 – 2010-11-16 04:09:44

+0

是的,這只是一種考慮到他不會在其他地方擁有電子郵件領域的方法。 – raidfive 2010-11-16 18:43:45

3

這是一個自定義驗證器的完美情況。由於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 
+0

謝謝,那個插件Rails 3友好嗎?它看起來並沒有多年被觸及。我真的很喜歡你的自定義驗證器的想法,似乎乾淨而簡單。你如何檢查new_record?介意如何做到這一點?謝謝 – AnApprentice 2010-11-16 03:52:00

+0

attr_accessible呢? – AnApprentice 2010-11-16 03:55:59

+0

@AnApprentice你說得對,不能擔保Rails3的兼容性。無論如何,自定義驗證器比以前更容易。 – 2010-11-16 04:11:02

相關問題