小编and*_*ell的帖子

覆盖action_controller.allow_forgery_protection以进行特定集成测试

我有一个protect_from_forgery在我的基本应用程序控制器中使用的rails3应用程序.我正在使用ActionDispatch::IntegrationTest并希望确保在某些集成测试期间存在真实性令牌.

我不希望执行帖子的每个功能测试都必须传递authenticity_token,所以我的test.rb文件指定:

  config.action_controller.allow_forgery_protection    = false
Run Code Online (Sandbox Code Playgroud)

正如rails文档所暗示的那样.

但是,对于集成测试,我希望确保我的表单正确发送真实性令牌.如果不全局更改设置,我找不到任何方法config/environments/test.rb

如果所有表单都是生成的,form_for我会满足于相信rails会处理这个,但是我使用ExtJS并且有许多需要手动指定的ExtJS表单,所以我真的应该测试管道是否全部工作.

security testing integration-testing ruby-on-rails ruby-on-rails-3

9
推荐指数
2
解决办法
3559
查看次数

设计:让多个控制器处理用户会话

我正在使用rails 3.0.7运行设计1.3.4.用户可以通过两种方式登录:使用网络应用,使用移动网络应用(通过JSON API调用).第一种方法由默认设备会话控制器完美处理.API调用的身份验证方法需要在扩展我的控制器中Api::BaseController.所以,我写了第二个这样的控制器:

class Api::UserSessionsController < Api::BaseController
  …
  def create
    user = warden.authenticate(:scope => :user)
    if user
      sign_in(:user, user)
    else
      # Do some error handling
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

试图通过这种方法登录失败,由于valid_controller?在法Devise::Strategies::Authenticatable.因为我已将默认控制器(devise/sessions)作为用户的映射控制器,所以它不允许从我的自定义控制器进行身份验证.

我想将我的自定义功能推送到我自己的子类中Devise::SessionsController,但是我需要 API会话控制器来扩展它API::BaseController,所以我也无法扩展Devise::SessionsController.我不想在API控制器中放置工作的,默认行为的web-app身份验证方法,特别是因为这需要从设计控制器复制它们.

有什么建议?是否有一些我缺少的配置允许多个控制器处理会话?该valid_controller?方法进行==比较,而不是.include?,所以我不知道这将如何工作.

UPDATE

这是一个可怕的临时解决方法.我不喜欢它,所以我不是把它作为答案发布,但我认为它可能会为你所有的回答者类型提供食物思考:

在我的create方法的顶部,我可以覆盖Devise期望的会话控制器.

Devise.mappings[:user].controllers[:sessions] = params[:controller]
Run Code Online (Sandbox Code Playgroud)

这正在解决Devise的预期功能(需要一个特定的控制器来创建会话),所以我不想保留它.我想知道这种约束是安全措施还是只是一种约定 - 如果是为了安全,这可能是非常糟糕的.

authentication devise warden ruby-on-rails-3

7
推荐指数
1
解决办法
2697
查看次数

Rails:ParameterFilter :: compiled_filter尝试复制符号

我正在运行带有rails exception-notifier gem的rails3.当发生异常,并且应该发送电子邮件时,我从ParameterFilter类中获得异常.我在rails源中发现了这个问题,我不确定最好的方法.

问题发生在ActionDispatch :: Http :: ParameterFilter中.在compiled_filter方法中,第38行发生错误:key = key.dupwhen key是符号,因为符号不可复制.这是来源:

def compiled_filter
    ...
    elsif blocks.present?
        key = key.dup
        value = value.dup if value.duplicable?
        blocks.each { |b| b.call(key, value) }
    end
Run Code Online (Sandbox Code Playgroud)

我看到他们只是在它dup出现value时才会打电话duplicable.如果我修补源只调用dupkey时候keyduplicable,那么我的问题消失.我假设有一个理由为什么作者提出了这个条件value而不是key,所以我很好奇是否有人对这个代码有更好的理解.

只有在application.rb中向过滤器参数添加块时才会出现此错误.所以,也许我的原始问题有一个解决方法,不需要在这里使用块.如果您有兴趣,请参阅我的同事的问题Rails:从日志中过滤JSON参数中的敏感数据

这是一个问题的关键是:action.这来自rails,我不知道是否有办法强迫它成为一个字符串.

我提交了一个rails bug https://rails.lighthouseapp.com/projects/8994/tickets/6557-symbol-duplication-error-in-parameterfilter-compiled_filter我有一个准备好的补丁,如果key.duplicable?key.dup线,我是寻找关于这是否是正确解决方案的输入.

ruby symbols actionmailer actiondispatch ruby-on-rails-3

5
推荐指数
1
解决办法
348
查看次数

无法使用Lambda部署示例Alexa技能

我正在尝试从示例项目部署Alexa HelloWorld技能:https://github.com/amzn/alexa-skills-kit-java,提交b58bfa641c7d58c476b80a4e8dd5ccbe0f9b2c40.

根据我运行的自述文件:

mvn assembly:assembly -DdescriptorId=jar-with-dependencies package
Run Code Online (Sandbox Code Playgroud)

并将生成的alexa-skills-kit-samples-1.0-jar-with-dependencies.jar上传到Lambda控制台.当我尝试测试Lambda(在Web控制台中)时,我得到:

START RequestId: fe219281-be67-11e5-b15e-d79134e05828 Version: $LATEST
Class not found: helloworld.HelloWorldSpeechletRequestStreamHandler: class java.lang.ClassNotFoundException
java.lang.ClassNotFoundException: helloworld.HelloWorldSpeechletRequestStreamHandler
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)

END RequestId: fe219281-be67-11e5-b15e-d79134e05828
REPORT RequestId: fe219281-be67-11e5-b15e-d79134e05828  Duration: 0.90 ms   Billed Duration: 100 ms     Memory Size: 512 MB Max Memory Used: 10 MB
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

java amazon-web-services alexa aws-lambda alexa-skills-kit

5
推荐指数
1
解决办法
1114
查看次数