Ruby on Rails 中身份验证的最佳解决方案 [关闭]

Posted

技术标签:

【中文标题】Ruby on Rails 中身份验证的最佳解决方案 [关闭]【英文标题】:Best Solution For Authentication in Ruby on Rails [closed] 【发布时间】:2010-09-06 15:52:08 【问题描述】:

我正在寻找可以在我的 RoR 应用程序中使用的预构建解决方案。理想情况下,我正在寻找类似于 ASP.NET Forms 身份验证的东西,它提供电子邮件验证、注册控件并允许用户重置密码。哦,是的,而且很容易让我拉出当前登录到应用程序的用户。

我已经开始研究已经写好的文章,但我发现它真的很混乱。我看过 LoginGenerator、RestfulAuthentication、SaltedLoginGenerator,但似乎没有一个地方有很好的教程或提供它们的比较。如果有一个我还没有发现的网站,或者如果有一个大多数人使用的事实上的标准,我将不胜感激。

【问题讨论】:

【参考方案1】:

我真的会推荐Restful Authentication。我认为这几乎是事实上的标准。

【讨论】:

我会支持这个。我最近必须实现一个非常复杂的多站点身份验证系统,它基于 RestfulAuth 设计,为应用程序的其余部分提供与 RA 相同的 API,这绝对是一个很好的清晰易用的 API,易于使用阅读代码:-)【参考方案2】:

如果您希望除了密码支持之外还需要 OpenID 支持,还有 RestfulOpenIDAuthentication。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

我还想指出一个出色的 tutorial/discussion 扩展 Restful 身份验证的核心功能,以防您正在寻找更强大的东西。

【讨论】:

请不要认为我非常粗鲁,但我认为论坛条目是 Restful 身份验证最糟糕部分的一个例子。有许多缺失的功能,这里有一组超长(且矛盾)的步骤,用于一次添加这些功能。不管 DRY 的反义词是什么,我很确定就是这样。只是您不是在重复自己,而是在重复数百名其他开发人员以包含从一开始就应该包含或可选的 RA 的内容。【参考方案5】:

restful_authentication 是一个功能强大的工具,它非常灵活,可以开箱即用地提供您正在寻找的大部分内容。但是,有几点需要注意:

    不要从“控制”的角度来思考。在 Rails 中,模型、视图和控制器比在“Webforms 风格”的 ASP.NET 中独立得多。独立计算出你想要从每一层得到什么,编写测试/规范以匹配并确保每一层都在做你期望的事情。 即使您使用插件,也无法替代阅读(至少部分)生成的代码。如果您对幕后发生的事情有一个全面的了解,您会发现调试和定制要容易得多。

【讨论】:

【参考方案6】:

插件restful_authentication和其他扩展它的插件,完美满足您的需求。在 github.com 上快速搜索会发现很多教程、示例和扩展。去这里: - http://github.com/search?q=restful_authentication

有几个项目使用 restful_authentication 只是为了提供仅具有身份验证部分的准系统 Rails 应用程序的示例。

    http://github.com/fudgestudios/bort -- 一个基本的 Rails 应用程序,具有:RESTful 身份验证 http://github.com/mrflip/restful_authentication_example -- 另一个项目,很好地展示了如何使用 restful_authentication http://github.com/activefx/restful_authentication_tutorial -- 同上,捆绑了一些其他插件。 http://railscasts.com/episodes/67-restful-authentication -- 一个解释 restful_authentication 的精彩截屏视频

这些信息应该足以让你开始寻找正面和反面......祝你好运。

【讨论】:

【参考方案7】:

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 从所有以前的解决方案中学习,并将它们重新打包成一个更清洁、更可定制的解决方案 我接受了您的建议并选择了 Authlogic,我真的很高兴。设置可能需要更长的时间,它非常干净且易于理解。没有可怕的生成代码。 是的,设置需要更长的时间。我希望他在那里删除了一些抽象,并让它附带每个人都需要的东西,比如忘记密码,包括电子邮件确认。不过总体来说还是不错的。 我也可以将它与 OpenID 和 RPXNow 结合使用,结果非常棒,例如:buyersvote.com/user_session/new 示例项目使启动和运行变得超级容易。只需 git clone 存储库,复制到 database.yml 文件中,您就可以准备好一个完全经过身份验证的站点。【参考方案8】:

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

很遗憾,我不能发布多个链接,但是到 railscast、密码重置博客文章和示例应用程序的链接都在 README 中(请参阅 AuthLogic 存储库的 README)

更新:现在我可以发布更多链接,所以我链接了更多。感谢 marinatime 同时添加链接

【讨论】:

Railscast 链接 - railscasts.com/episodes/160-authlogic【参考方案9】:

我真的很喜欢thoughtbot 的许可。非常简单,并且有一些很好的钩子并且是可测试的。

【讨论】:

【参考方案10】:

对 Clearance 的另一票 - 可能不像 authlogic 那样可定制或“内”,但就能够将其放置到位并继续运行而言,它绝对值得一看。

【讨论】:

【参考方案11】:

对于一个非常简单的解决方案,请使用Clearance。

如果您正在寻找更多选择,Devise 是一个很好的解决方案。它使用 Warden,这是一个基于机架的身份验证系统。

【讨论】:

我可以担保 Devise。我在我的应用程序中设置了它,并且可以说它很容易使用,至少对于我这个相对新手来说。我在这里写了一篇关于我的经验的博客:therealmattslay.blogspot.com/2010/06/… 对不起...这是更正后的链接:mattslay.com/devise-authentication-for-rails【参考方案12】:

刚刚更新一下:Ryan Bates 的Railscast #250 展示了从头开始构建身份验证系统....

【讨论】:

虽然定制身份验证系统上的 RailsCast 很棒(而且我已经多次实现了类似的系统),但它绝不是预先构建的,也没有提供设置喜欢的所有功能设计确实如此。 同意,但 Devise 可能相当庞大。在我看来,除非你真的要充分利用 Devise 提供的功能,否则通过构建自己的身份验证系统可以节省很多时间和心痛。 我正在寻找可以在我的 RoR 应用程序中使用的预构建解决方案。

以上是关于Ruby on Rails 中身份验证的最佳解决方案 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 RESTful 身份验证插件进行 Ruby on Rails 功能测试

遇到致命问题:使用 ruby​​ on rails 对用户“postgres”进行对等身份验证失败

Heroku上的现有Ruby on Rails Web应用程序(PostgreSQL),Devise身份验证,需要为移动支持添加Rails API

使用 Ruby on Rails 的 angular.js 中的安全性

Ruby on Rails 应用程序的 OpenID 支持

Image Heavy App 的最佳 Ruby on Rails 架构