Rails身份验证 - 当*不*使用Devise时潜在的陷阱?

时间:2013-01-04 20:32:06

标签: ruby-on-rails-3 devise

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

我的问题是,不使用Devise但是根据Railscast进行某些操作会有什么潜在的陷阱?他们需要考虑的安全问题是否已经在演员表中得到了解决?你能想到的任何其他陷阱吗?

编辑:为什么我在考虑不使用Devise?我回避Devise的部分原因是因为我并不热衷于登录失败保护。 Devise的方式意味着任何人都可以锁定其他人的帐户,如果他们只知道他们的电子邮件地址。而且在我看来,总的来说,我最好不要自己动手而不是去了解Devise来做出这些改变,特别是如果我将来还需要以自己的方式做其他事情。 (这似乎很可能)。

2 个答案:

答案 0 :(得分:3)

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

现在,如果你还想要:

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

现在这些实施起来会有点困难。

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

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

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

答案 1 :(得分: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

此外,如果您确实使用了可锁定模块,因为锁定是基于许多失败的身份验证尝试,您可以在 config/initializers/devise.rb <中触发锁定之前更改最大尝试次数/ p>

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