Ruby on Rails身份验证指南

7

有没有关于在Ruby on Rails中构建自己的身份验证系统的好指南?我想要自己的系统来与我正在构建的社区一起使用 :)

谢谢!

6个回答

8
我建议从Warden开始 - 它会为您处理会话的基本功能,并为您构建逻辑提供良好的基础。 Rails Warden插件是一个相当小的库,可帮助将其集成到Rails中。这两个项目都相当成熟和良好构建,但仍在积极开发中 - 它们是不错的选择。
您应该了解Devise,另一个基于Warden的身份验证框架(如Authlogic或Restful Authentication)。它可能不适合您的项目(对我来说不是),但查看源代码可能会给您一些有关如何最好使用Warden的想法。
另外一件事需要注意的是,在密码哈希方面,您应该绝对使用bcrypt

Devise似乎是由制作Warden的同一人创建的?这是正确的吗,我喜欢Warden。但是Warden必须通过这个“Rack”吗?那么这个Rack是什么?如果您能简单地解释一下就好了。它好用吗?我应该使用它吗? - Lisinge
1
Warden和Devise有一些共同的开发者。Rack是Ruby Web框架和它们运行的服务器之间的接口。Rails是建立在Rack之上的,所以你已经在使用它了。如果你使用Warden和Rails Warden,你就不必担心直接与Rack交互——它们会为你处理好这一切。如果你感兴趣,这里有一个关于Rack的视频解释,但这可能不是你需要担心的事情:http://railslab.newrelic.com/2009/06/05/episode-14-rack-metal - PreciousBodilyFluids

4
迈克尔·哈特尔有一本好书即将出版,前8章节的PDF格式免费提供下载:http://www.railstutorial.org/。这些章节涵盖了创建一个非常可靠的基于Rspec认证系统的整个过程。我极力推荐这本书。

2
好的,这是一段英文文本,翻译如下:

嗯,你提问后过了一段时间,但如果你想要构建自己的身份验证系统而不是使用像Devise这样的东西,最好的答案可能是Ryan Bates' Authentication from Scratch Screencast


阅读完那个 Railscast 后,我也建议您查看这个:http://railscasts.com/episodes/270-authentication-in-rails-3-1 - antinome

1

由于身份验证是一个常见的问题,已经解决了许多次,我建议先调查现有的解决方案。

例如,可以看看 Restful Authentication,它为Rails中的身份验证提供了很好的基础。即使您更愿意自己开发系统,通过尝试使用 Restful Authentication 并了解其工作原理,应该可以帮助您在开始构建自己的系统时了解所需的组件。


我已经尝试过Restful Authentication和Authlogic,但我认为它们不适合我。这就是为什么我想自己编写的原因。 - Lisinge
我想的更多是剖析其中一种解决方案,以了解它们在底层是如何工作的。这不仅是一个良好的代码阅读练习,而且一旦您理解了其中一个系统,构建自己的解决方案将相当容易,借鉴您喜欢的想法并改变您不喜欢的东西。 - Pär Wieslander

0

3
那篇文章已经将近四年了,不符合当前的最佳实践。我建议避免使用它,并寻找更为更新的资源。 - Pär Wieslander
真的吗?你可以告诉我在哪里寻找“最佳实践”信息吗?我一直在寻找一个好的地方来找到这种信息。我不知道这篇文章打破了惯例。 - G. Martin
@G. Martin:http://guides.rubyonrails.com/上的指南非常适合阅读现在推荐的做事方式。例如,你提到的文章没有使用RESTful路由。而且,文章中用于表单生成的`start_form_tag`和`end_form_tag`已经在Rails 1.2中被弃用,并在Rails 2.0中删除--现在应该使用form_forform_tag - Pär Wieslander
@Par Wieslander 好的。我以前用过这些,它们可以非常有帮助。然而,它们经常感觉有点不够个性化。出于好奇,你提到的那些问题是我链接的指南唯一的问题吗?我想知道是否还有更深层次的问题。我的意思是,你可以轻松地改变表单路由等内容,这篇文章所提出的想法仍然是好的,对吧? - G. Martin
1
@G. Martin:我还没有检查文章中的所有细节,但是总体思路似乎没问题。只要你了解当前的Rails惯用语并能够将过时的部分适应现代最佳实践,我想这篇文章仍然可能有些用处。但对于那些仍在学习基础知识的人来说,它可能会带来更多的困扰而不是帮助。 - Pär Wieslander

0

我同意Ritchie的观点... Devise有一些非常好的功能,但它与其他工具不兼容。在许多用例中,它劫持路由的方式可能会使您的工作更加困难。在许多情况下,您可能最好自己开发。

Devise在我的Rails资产管道中引起了循环引用,并且安装时初始化器中的设置(截至昨天的最新版本)与它生成的迁移中的默认设置冲突。

我已经构建了企业级身份验证系统,包括电子邮件验证、密码恢复等等。而且没有一个需要使用Devise所使用的路由技巧。如果您真的需要所有这些功能,那么它可能适合您。但是也有很多不使用它的理由。


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