我有一个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
我正在使用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的预期功能(需要一个特定的控制器来创建会话),所以我不想保留它.我想知道这种约束是安全措施还是只是一种约定 - 如果是为了安全,这可能是非常糟糕的.
我正在运行带有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.如果我修补源只调用dup的key时候key是duplicable,那么我的问题消失.我假设有一个理由为什么作者提出了这个条件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线,我是寻找关于这是否是正确解决方案的输入.
我正在尝试从示例项目部署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)
我错过了什么?
actionmailer ×1
alexa ×1
aws-lambda ×1
devise ×1
java ×1
ruby ×1
security ×1
symbols ×1
testing ×1
warden ×1