Ruby on rails 在开发模式中绕过身份验证和/或授权的好方法是什么?
我有几个操作受到过滤器的保护,这些过滤器检查Ruby on rails 在开发模式中绕过身份验证和/或授权的好方法是什么?,ruby-on-rails,ruby,authentication,authorization,Ruby On Rails,Ruby,Authentication,Authorization,我有几个操作受到过滤器的保护,这些过滤器检查登录?和管理?并在测试失败时分别抛出401或403个错误。只有在开发模式下才能绕过这些过滤器,这样我才能测试我的应用程序,有什么好方法 我无法完成实际的登录过程,因为它依赖于我在开发过程中无法访问的基础设施 我还希望能够检查401和403是否正确,所以我不想完全关闭所有的身份验证过滤器。我希望在尽可能少的地方定义它,这样我就不会在生产中意外地让世界绕过过滤器 有人找到了一个好的覆盖机制吗?我想到了一些想法: 分别在过滤器中添加对params[:log
登录?
和管理?
并在测试失败时分别抛出401或403个错误。只有在开发模式下才能绕过这些过滤器,这样我才能测试我的应用程序,有什么好方法
我无法完成实际的登录过程,因为它依赖于我在开发过程中无法访问的基础设施
我还希望能够检查401和403是否正确,所以我不想完全关闭所有的身份验证过滤器。我希望在尽可能少的地方定义它,这样我就不会在生产中意外地让世界绕过过滤器
有人找到了一个好的覆盖机制吗?我想到了一些想法:
- 分别在过滤器中添加对
和params[:logged_in]&&RAILS\u ENV=~/dev/
的检查。这适用于params[:admin]&&RAILS\u ENV=~/dev/
s,但我必须在所有表单和AJAX请求中添加额外的隐藏字段GET
- 添加一个仅在开发模式下可用的链接,该链接模拟以普通用户或管理员身份登录。这似乎是一个更好的选择
def logged_in?
return true if Rails.env.development?
... etc
end
当你这样做的时候,你需要两件事:
一旦您获得了验证信息,那么您所需要做的就是选择适当的点,在该点插入模拟对象,而不是在开发中无法使用的与验证系统通信的真实对象。如果您现在没有这样的位置,则必须重构代码来创建它。在config/environments中,您为每个环境都提供了脚本,允许您应用特定于环境的设置
如果这些设置在Rails引导过程中应用得足够晚,那么我会考虑在那里覆盖您的身份验证机制的相关方面。这避免了在生产应用程序中使用特定于开发的代码,这对我来说是个好主意
是的,但是我不能在开发过程中测试真正的功能。这就是我在第一个要点中提出的建议。Mislav Marohnić在这方面有一个巧妙的转变:通过这种方式,您可以自动登录,但前提是您获得登录表单(比如,/login.html)。