【问题标题】:Rails 3 Authentication: Authlogic vs DeviseRails 3 身份验证:Authlogic vs Devise
【发布时间】:2011-05-07 08:57:05
【问题描述】:

我一直在 Rails 2.3 中使用 Authlogic,但现在我使用的是 Rails 3,我想我可能会尝试一种新的身份验证解决方案。

Devise 与 Authlogic 相比如何?他们有什么区别?

【问题讨论】:

  • 我刚刚开始使用 Rails,现在只使用 Devise。昨天我确实偶然发现了 Prologue (github.com/quickleft/prologue);如果您只是使用它设置 Rails 3 项目,请使用 Devise 并创建和管理 UI。通过查看输出,您可能可以根据自己使用 Authlogic 的经验进行一些比较。
  • 我最终选择了Devise,给我留下了深刻的印象。

标签: ruby-on-rails-3 authlogic devise


【解决方案1】:

我都使用过它们,但没有广泛使用。在我的上一个项目中,我给了 Devise 一个机会。我最终改用 Rails-Warden。

  • Devise 是一个建立在 Warden 之上的完整身份验证框架。要自定义其外观,您可以使用生成器,然后编辑生成的视图。它的路线和视图逻辑是硬编码的。例如,成功登录总是会把你带到 /session/new?这对我来说是个交易破坏者,我希望我的用户最终获得“欢迎/索引”。设计没有像 authlogic 那样有据可查或直观。

  • Warden 是 Devise 所基于的中间件框架。它具有许多 Web 身份验证方案(fb、openid、oauth)的插件,并且很容易为您自己的身份验证后端构建插件。它没有 UI,文档不如 authlogic。

  • 我最终使用了 rails-warden,因为我需要插入多个自定义身份验证方案。

  • 另外,请参阅下面的 OmniAuth 答案,这就是我在 2012 年使用的。
  • 【讨论】:

    • 您可以轻松自定义登录后如何重定向:rubydoc.info/github/plataformatec/devise/master/Devise/… 我们在 wiki 中也有一堆“操作方法”:github.com/plataformatec/devise/wiki/_pages
    • Devise 是一个真正的 PITA,如果你想做除了默认值之外的任何事情。自定义框架中存在灵活性,但文档很弱,您将花费更长的时间来设计您的计划,而只是在 authlogic 中构建它。使用 authlogic 的结果也简单得多,您可以根据需要构建它,而不必将某些东西扭曲成形状。我应该说这是来自痛苦的经历,我已经在几个项目中使用了 devise(当您需要 oauth 或开箱即用的东西时,这非常诱人)并且每次我都后悔。
    【解决方案2】:

    我发现 Devise 对我来说太固执己见了。如果你只是想接受它开箱即用的方式,那么它很好而且很容易上手。我有一些特定的要求,发现自己编写了一些东西来绕过 Devise,所以最终将其撕掉并将 Authlogic 更新为 Rails3。

    【讨论】:

    • 同意,根据 Rails,Devise 确实非常严格地实践约定优于配置。虽然我个人在配置方面没有任何问题(还)。
    • 我在配置中遇到了一个问题,它不能很好地与 attr_accessible 配合使用。您必须将控制器覆盖到创建/更新方法,或者只需将所有字段添加到 attr_accessible 和围绕它的猴子补丁过滤器,以从参数哈希中删除敏感属性(如果存在)。
    【解决方案3】:

    对于设计,如果您想将成功登录发送到“欢迎/索引”,请添加到 routes.rb

    namespace :user do
        root :to => "welcome#index"
    end
    

    如文档所述https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in

    就个人而言,我喜欢设计。它认为这很棒,我想你可以称之为“有意见”,但这些意见很容易被覆盖。

    【讨论】:

      【解决方案4】:

      如果您需要对 Twitter、Facebook、LinkedIn 和 Google 进行多重 OAuth 身份验证,您可以将 OmniAuth gem 与 A​​uthlogic 一起使用。易于计算,并让您完全控制用户从不同社交网站进行身份验证时发生的情况,您可以在 authorizations_controller.rb 中执行此操作。

      【讨论】:

        【解决方案5】:

        和最初的提问者一样,我也一直在 Rails 2.3 中使用 AuthLogic,但是当 AuthLogic 还没有为 Rails 3.1 做好准备时(当时处于 RC 阶段),我选择了使用 Devise。总的来说,我已经让 Devise 做我想做的事,但我很不高兴,希望我没有做出改变。

        用户身份验证表面上看起来很简单,是“组件化”的理想之选,但很多时候,您希望让用户在要求登录之前完全与您的网站互动,而 Devise 使这变得更加困难。

        是的,例如将 after_sign_in_path_for / after_sign_up_path_for 放入应用程序控制器的功能可以工作,但这些功能实际上只是返回一个路径,如果您使用的是 Devise,您会发现自己在其中粘贴了大块代码。它可以工作,但对我来说,拥有自己的用户控制器来处理与用户相关的操作更优雅。

        【讨论】:

          【解决方案6】:

          我喜欢设计。您也可以将 OmniAuth 与 Devise 一起使用。我认为 Devise 项目非常活跃,在互联网上有很大的支持。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-02-26
            • 2010-11-11
            • 1970-01-01
            • 1970-01-01
            • 2014-01-04
            相关资源
            最近更新 更多