Rails 3身份验证:Authlogic vs Devise

ama*_*euk 42 authlogic devise ruby-on-rails-3

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

Devise与Authlogic相比如何?他们有什么不同?

Ale*_*tic 31

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

  • Devise是一个建立在Warden之上的完整身份验证框架.要自定义其外观,请使用生成器,然后编辑生成的视图.它的路由和视图逻辑都是硬编码的.例如,成功登录将始终带您到/ session/new?这是一个破坏者或我,我希望我的用户最终得到"欢迎/索引".设计不像authlogic那样有文档记录或直观.

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

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

  • 另外,请参阅下面的OmniAuth答案,这就是我在2012年使用的内容.

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

    twm*_*loy 31

    对于设计,如果要将成功登录发送到"welcome/index",则添加到routes.rb

    namespace :user do
        root :to => "welcome#index"
    end
    
    Run Code Online (Sandbox Code Playgroud)

    记录https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in

    就个人而言,我喜欢设计.它认为这很好,我猜你可以称之为"自以为是",但这些意见很容易被覆盖.


    jam*_*s2m 11

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


    fuz*_*oup 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,你会发现自己会把大块代码放入其中.它有效,但让我自己的用户控制器处理用户相关的操作对我来说更优雅.


    Adr*_*the 7

    如果您需要对Twitter,Facebook,LinkedIn和Google进行多次OAuth身份验证,则可以使用OmniAuth gem和Authlogic.易于弄清楚并让您完全控制用户从不同社交网站进行身份验证时发生的情况,您可以在authorizations_controller.rb中进行操作.