Ruby on Rails中身份验证的最佳解决方案

84

我正在寻找一个预先构建的解决方案,可以在我的RoR应用程序中使用。我希望有类似于ASP.NET Forms身份验证的东西,它提供电子邮件验证、注册控制,并允许用户重置密码。还有,容易让我找到当前已登录到应用程序的用户。

我已经开始研究一些已经编写好的代码片段,但是我发现非常令人困惑。我已经看过LoginGenerator、RestfulAuthentication、SaltedLoginGenerator,但是没有一个地方有很好的教程或提供它们之间的比较。如果有我还没发现的网站,或者有一个大多数人使用的事实标准,我会非常感激帮助的手。

12个回答

84

AuthLogic似乎是新贵,似乎是restful_authentication的下一代进化,更易于使用等。

http://github.com/binarylogic/authlogic/tree/master

编辑: 现在Rails 3已经发布,Devise似乎是新贵中的新贵

https://github.com/plataformatec/devise 或者我现在自己使用Rails内置的has_secure_password来实现身份验证 http://railscasts.com/episodes/250-authentication-from-scratch-revised

附注:Ruby Toolbox是一个寻找各种类别(根据GitHub观察者数量)中当前最佳解决方案的好网站:

http://ruby-toolbox.com/categories/rails_authentication.html


我真的会考虑使用authlogic。它比restful_auth更加简洁。Authlogic从以前的所有解决方案中学习,并将它们重新打包成一个更干净、更可定制的解决方案。 - taelor
我采纳了你的建议,使用了Authlogic,我非常满意。虽然设置可能需要一点时间,但非常简洁易懂,不存在令人生畏的大量生成代码。 - Guy C
是的,设置需要更长时间。我希望他能减少一些抽象,并将它与每个人都需要的东西一起发布,例如忘记密码和电子邮件确认。但总体而言,它仍然相当不错。 - Brian Armstrong
我成功地将它与OpenID和RPXNow结合起来,效果非常棒,这里有一个示例:http://buyersvote.com/user_session/new - Brian Armstrong
这个示例项目使得启动和运行变得非常容易。只需克隆存储库,复制一个database.yml文件,您就有了一个完全经过身份验证的站点准备好了。 - Casey Watson

22

1
我也同意这个观点。最近我不得不实现一个相当复杂的多站点认证系统,我基于RestfulAuth设计来完成它,并为应用程序提供了与RA相同的API。这绝对是一个漂亮、清晰、易于使用的API,代码易于阅读 :-) - Laurie Young

10

如果您想要一个非常简单的解决方案,请选择Clearance

如果您需要更多选择,Devise 是一个非常好的解决方案。它使用 Warden 作为基于 Rack 的身份验证系统。


1
我可以保证Devise。我在我的应用程序中安装了它,并且可以说对于我这样的相对新手来说,它很容易使用。我在这里博客记录了我的经验:http://therealmattslay.blogspot.com/2010/06/devise-authentication-for-rails.html - MattSlay
抱歉...这是更正后的链接:http://mattslay.com/devise-authentication-for-rails/ - MattSlay

3

我非常喜欢thoughtbot的清除服务。它非常简单,有一些很好的钩子,并且易于测试。


3

AuthLogic似乎是你想要的。它非常可配置,虽然它不会为你生成代码,但使用起来相当容易。对于电子邮件验证和密码恢复,您可能需要使用:perishable_token列。AuthLogic会处理它,您只需要在使用时重置它即可。有关如何设置基本应用程序的信息,可以参考Ryan Bates的Railscast on AuthLogic和“官方”示例应用程序。AuthLogic的创建者Ben Johnson还撰写了一篇关于如何RESTful地重置密码的博客文章。

不幸的是我不能发布多个链接,但是README中有指向railscast、密码重置博客文章和示例应用程序的链接(请参见AuthLogic存储库的README)

更新:现在我可以发布更多的链接,因此我添加了更多的链接。谢谢marinatime在此期间添加链接


Railscast链接 - http://railscasts.com/episodes/160-authlogic - martinatime

3

3

请注意,LoginGenerator和SaltedLoginGenerator已被Restful Authentication取代,并且在较新的Rails版本上不受支持--不要浪费时间在它们上面,尽管它们在当时很棒。


3

我还想指出一个关于扩展Restful Authentication核心功能的绝佳教程/讨论,以防你正在寻找更加强大的东西。


1
请不要认为我很粗鲁,但我认为论坛帖子是Restful身份验证最糟糕的部分之一。有许多缺失的功能,以下是一组超长(且自相矛盾)的步骤,逐个添加这些功能。无论DRY的相反面是什么,我确信那就是它。你不是在重复自己,而是在重复其他数百个开发人员的工作,以包含本应从一开始就包含或是可选的RA内容。 - John Munsch

2
restful_authentication是一个功能强大、非常灵活的工具,它提供了大部分你需要的功能。然而,有几个注意点:
  1. 不要以“控件”为思考方式。在Rails中,模型(Model)、视图(View)和控制器(Controller)比“Webforms-style”ASP.NET更加独立。分别确定每个层面所需的功能,编写相应的测试/规范来匹配,并确保每个层面都按照预期运行。
  2. 即使你正在使用一个插件,也没有什么可以代替阅读(至少一部分)生成的代码。如果你对底层的大局有一个概念,你会发现调试和自定义变得更容易。

2
插件restful_authentication及其扩展插件完美地满足了您的需求。在github.com上进行快速搜索,将会呈现大量的教程、示例和扩展。
请前往此处: - http://github.com/search?q=restful_authentication 有几个项目仅使用restful_authentication提供Rails应用程序的身份验证部分作为示例。
  1. http://github.com/fudgestudios/bort -- 一个基于Rails框架的应用程序,采用RESTful Authentication技术。
  2. http://github.com/mrflip/restful_authentication_example -- 另一项目提供了如何使用restful_authentication的绝佳示例。
  3. http://github.com/activefx/restful_authentication_tutorial -- 与上述示例相同,还捆绑了其他插件。
  4. http://railscasts.com/episodes/67-restful-authentication -- 一个介绍restful_authentication的优秀视频演示。
这些信息应该足以让您开始寻找头绪...祝您好运。

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