Rails 3身份验证:Authlogic vs Devise

42

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

Devise和Authlogic有什么区别?它们之间有什么不同之处?


3
我刚开始学习Rails,目前只使用了Devise。昨天我偶然发现了Prologue(https://github.com/quickleft/prologue),如果你使用它设置Rails 3项目,它会使用Devise并创建管理UI。你可以通过观察输出结果,从自己的经验中进行一些与Authlogic的比较。 - cfeduke
1
最终我选择了Devise,我非常印象深刻。 - amaseuk
6个回答

31

31

我两个都用过,但不是非常深入。在我的最后一个项目中,我尝试了 Devise,但最终使用了 Rails-Warden。

  • Devise 是建立在 Warden 之上的完整身份验证框架。要自定义其外观,你可以使用生成器,然后编辑生成的视图。它的路由和视图逻辑是硬编码的。例如,成功登录将始终带您转到 /session/new?这对我来说是致命的问题,我希望我的用户最终能够进入“welcome/index”。Devise 的文档不如 Authlogic 那么全面并且也不那么直观易懂。
  • Warden 是 Devise 基于的中间件框架。它具有许多网络身份验证方案的插件(fb、openid、oauth),而且很容易为自己的身份验证后端构建插件。它不带界面,文档也不如 Authlogic 那么好。

  • 我最终使用 rails-warden,因为我需要插入多个自定义身份验证方案。
  • 另外,请参见下面的 OmniAuth 答案,那是我在2012年使用的东西。

  • 3
    你可以轻松地自定义在登录后重定向的路径:http://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:after_sign_in_path_for我们还在维基中有许多“如何”文章:https://github.com/plataformatec/devise/wiki/_pages - José Valim
    2
    如果你想要做除了默认之外的任何事情,Devise就会让人非常头疼。框架本身具有定制的灵活性,但是文档太弱了,你将花费更长的时间来弯曲Devise以符合你的计划,而不是使用Authlogic直接构建它。使用Authlogic结果会更简单,你可以根据需要构建它,而不必扭曲某些东西来适应。我必须说,这来自于痛苦的经验,我在几个项目中使用过Devise(当你需要OAuth或一些它开箱即用的东西时,它非常诱人),但每次我都后悔了。 - opsb

    11

    我觉得 Devise 对我来说过于专断了。如果你只想接受它默认的做法,那么它很好且易于上手。但是我有一些特殊要求,所以发现自己不得不写一些代码绕过 Devise,最终我选择摒弃它,改用 Rails3 的 Authlogic。


    同意,Devise在实践中非常严格地遵循约定优于配置的原则,就像Rails一样。虽然我个人在配置方面还没有遇到任何问题(至少目前为止)。 - amaseuk
    我在配置中遇到了一个问题,它与attr_accessible不兼容。你要么覆盖控制器直到create/update方法,要么将所有字段添加到attr_accessible,并在其周围修补过滤器以从params哈希中删除敏感属性(如果存在)。 - jpgeek

    10

    和提问者一样,我在Rails 2.3时代一直使用AuthLogic, 但在AuthLogic未适配Rails 3.1(当时处在RC阶段)时,我选择了使用Devise。总的来说,我让Devise做到了我想要的,但我对此不太满意,希望我没有做出这种改变。

    用户身份验证表面上看起来很简单,是一件理想的"组件化"的事情,但很多时候你希望在要求登录前让用户完全参与您的网站,而Devise会使这更加困难。

    是的,像将after_sign_in_path_for / after_sign_up_path_for放入Application Controller中的功能确实可以实现,但这些函数只是用于返回路径,如果你使用Devise,你会发现自己需要将大块的代码塞进去。它能用,但对我来说,拥有自己的用户控制器来处理用户相关操作更加优雅。


    7
    如果您需要对Twitter、Facebook、LinkedIn和Google进行多个OAuth身份验证,可以使用OmniAuth宝石以及Authlogic。它易于理解,并使您完全控制用户从不同社交网站进行身份验证时发生的情况,您可以在authorizations_controller.rb中完成此操作。

    3

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


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接