2013-01-04 37 views
2

我正在權衡是否推出我自己的認證系統(一個優秀的Railscast)或使用設計。Rails身份驗證 - 當*不*使用設計的潛在缺陷?

我的問題是,什麼是不使用Devise時的潛在缺陷,但根據Railscast去做什麼?他們需要考慮的安全問題是否已經在劇組中涵蓋了?任何其他你可以想到的陷阱?

編輯:我爲什麼想着不使用Devise?我避開Devise的部分原因是因爲我並不熱衷於失敗的登錄保護。設計的方式意味着任何人都可以鎖定其他人的賬戶,只要他們知道他們的電子郵件地址。在我看來,總的來說,我會比自己更好地瞭解設計,以便做出這些改變,特別是如果我將來需要在未來某個時候以我自己的方式做其他事情(這似乎很可能)。

+2

在Rails中滾動自己的身份驗證系統實際上非常微不足道,正是我認爲Rails的新來者的練習sh應該通過。使用'has_secure_password'和'attr_accessible',你將在安全方面達到相當好的形狀。 – meagar

+0

Thanks Meagar - 你能想到任何嚴重的陷阱嗎?在使用Devise時我們可能會認爲是理所當然的事情? (正如你可能已經注意到的,我有點擔心!) – A4J

+0

如果你唯一的問題是Devise是可鎖定的模塊。禁用它。 – simonmorley

回答

3

對於基本身份驗證(意味着只需輸入用戶名和密碼),推出自己的賬戶不會有任何嚴重的缺陷。現在

,如果你也想:

  • 餅乾的記憶登錄的用戶
  • 通過復位指令
  • 需要註冊
  • 一封確認郵件發送郵件來找回遺忘的密碼
  • 超時用戶會話在一段時間內沒有活動

現在這些woul d實施起來會比較困難。

所以,如果你只是想要一個基本的認證系統,你可以愉快地用你自己的。但如果你擔心你的應用程序的未來,那麼也許你應該與Devise一起去。這並不難理解,它提供了大量的功能,並且以後在實際決定使用Devise時不需要遷移數據。

編輯:所以,重申我所說的。如果這是一個寵物項目,你只想擁有一個基本的認證系統和授權系統,你只允許某些用戶查看特定的頁面,那麼你可以隨意實現自己的功能,並隨着自己的需要進行學習。

但是,如果這是更嚴重的事情,那麼我看不出有什麼理由不應該與Devise一起去。它讓我想起了人們創建自己的哈希和加密方案的時候,他們可以(而且應該)只是使用像bcrypt這樣強大而安全的東西。

+0

謝謝你一個很好的答案灰。大部分內容在Railscast中都有介紹:http://railscasts.com/episodes/274-remember-me-reset-password,那麼你還會建議使用Devise嗎? – A4J

+0

看到我編輯的答案。 – Ashitaka

+0

再次感謝Ash。我編輯我的問題與我回避Devise的原因。 – A4J

2

我一直在問同樣的問題。如果您希望真正潛入並花費一些時間進行身份驗證,請自行創建。但是如果你想快速獲得一些相當標準的東西,所以你可以專注於你的應用程序的功能,我會推薦設計。

它沒有出現可鎖定模塊默認是開啓的,但它很容易以任何方式完成。

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
      :recoverable, :rememberable, :trackable, :validatable 
    ... 
end 

此外,如果你沒有使用可鎖定模塊,因爲鎖是基於一些驗證嘗試失敗,您可以在config/initializers/devise.rb

Devise.setup do |config| 
    ... 
    # Number of authentication tries before locking an account if lock_strategy 
    # is failed attempts. 
    config.maximum_attempts = 20 
    ... 
end 
改變觸發鎖之前嘗試的最大數量

只需快速閱讀https://github.com/plataformatec/devise#devise