2

我正在权衡是否推出我自己的身份验证系统(如优秀的Railscast)或使用 Devise。

我的问题是,如果不使用 Devise 而是按照 Railscast 进行某些事情,可能会遇到哪些陷阱?我需要考虑的他们的安全问题是否尚未包含在演员表中?你还能想到其他的陷阱吗?

编辑:为什么我考虑不使用设计?我回避 Devise 的部分原因是我不喜欢它的登录失败保护。Devise 的做法意味着只要知道自己的电子邮件地址,任何人都可以锁定其他人的帐户。在我看来,总的来说,我最好自己动手,而不是彻底了解 Devise 来做出这些改变,特别是如果我在未来的某个时候也需要以自己的方式做其他事情(这似乎很可能)。

4

2 回答 2

3

对于基本身份验证(这意味着只有用户名和密码),推出自己的身份验证不会有任何严重的缺陷。

现在,如果您还想要:

  • 用于记住登录用户的 Cookie
  • 通过发送包含重置说明的电子邮件来恢复忘记的密码
  • 需要电子邮件确认才能注册
  • 超时用户会话在特定时间段内没有活动

现在这些将很难实现。

因此,如果您只想要一个基本的身份验证系统,您可以愉快地使用自己的身份验证系统。但是,如果您担心应用程序的未来,那么也许您应该选择 Devise。这并不难理解,它提供了大量的功能,以后当你真正决定使用 Devise 时,你就不必迁移数据了。

编辑:所以,重申我所说的。如果这是一个宠物项目,并且您只想拥有一个基本的身份验证系统和授权系统,您将只允许某些用户查看某些页面,那么您可以自由地实现自己的并随着您的发展而学习。

但是,如果这是更严重的事情,那么我看不出您有任何理由不选择 Devise。它让我想起了人们创建自己的哈希和加密方案时,他们可以(而且应该!)只使用像 bcrypt 这样强大且安全的东西。

于 2013-01-05T04:00:04.017 回答
2

不久前我也在问同样的问题。如果您想真正深入研究并花一些时间进行身份验证,请自己制作。但是,如果您想快速获得一些相当标准的东西,以便您可以专注于您的应用程序的功能,我建议您设计。

默认情况下,Lockable 模块似乎也没有打开,但无论哪种方式都可以轻松完成。

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

此外,如果您确实使用了 Lockable 模块,因为锁定是基于多次失败的身份验证尝试,您可以在触发锁定之前更改最大尝试次数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

于 2013-01-06T11:22:52.267 回答