我正在尝试为我的服务器端表单验证编写测试,但我一直收到Forbidden错误.看起来这需要一个两步的过程.步骤1,从表单中获取CSRF值.步骤2,使用CSRF值发布到表单处理程序.但无论我如何尝试发布,我都会收到一个禁止的错误.
--full test:https://github.com/socketwiz/swblog/blob/master/test/contact.js#L57-L100
我试过改变以下行:https: //github.com/socketwiz/swblog/blob/master/test/contact.js#L85
.send({name: 'foo', 'X-CSRF-Token': token})
.set('X-CSRF-Token', token)
.set('Cookie', ['X-CSRF-Token=' + token])
Run Code Online (Sandbox Code Playgroud)
但我尝试的任何东西似乎都无法满足CSRF的要求.我越是尝试越复杂,这似乎是一件简单的事情.也许我说这一切都错了.有任何想法吗?
我已将问题解决为以下简单代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>IE test</title>
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script type="text/javascript" charset="utf-8">
$( document ).ready(function() {
$('.js-click').click(function(e){
window.location.href = 'http://www.google.com/';
});
window.onbeforeunload = function(e){
return 'moving on';
};
});
</script>
</head>
<body>
<a href="#" class="js-click">Google</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这在chrome中的预期效果没有警告或错误,但在IE11中,当您选择"留在此页面上"时会抛出以下错误:
File: 10.0.1.126:8080, Line: 10, Column: 11
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
我在Rails中有一个删除链接:
<%= link_to "#{image_tag("icons/icon_delete.png", :alt => "Delete")} Delete".html_safe, "#suppliers", id: supplier.id, class: "delete", :title => "Delete", :confirm => 'Are you sure?', :method => :delete %>
Run Code Online (Sandbox Code Playgroud)
我有一个捕获它的骨干事件(CofeeScript):
events: ->
"click a.delete": "deleteSupplier"
deleteSupplier: (event) ->
event.preventDefault()
console.log("delete")
Run Code Online (Sandbox Code Playgroud)
所有这些都可以正常工作,只有当我在确认对话框中单击"确定"时,才会跟踪链接.任何想法如何防止这种情况?如果我从deleteSupplier返回false,则确认不再有效,这不是我所追求的.我希望确认工作正常,当我点击确定时,不要通过链接.
编辑:我忘了提到在通过ajax get请求加载页面后插入这些链接.我还通过删除:确认测试,它似乎没有任何区别.我相信它与通过ajax请求加载有关,但我认为如果是这样的话,事件甚至不会触发:(
我升级到angularjs v1.2,现在由于ngRoute我的单元测试失败了.我按照这里的更改http://docs.angularjs.org/api/ngRoute并在我的index.html文件中包含新脚本以及加载模块和我的应用程序工作正常:
--index.html
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
Run Code Online (Sandbox Code Playgroud)
--app.js
var socketwizModule = angular.module('socketwizApp', ['ngRoute']);
Run Code Online (Sandbox Code Playgroud)
但我的测试失败,出现以下错误.
我尝试了以下几件事,但似乎没有任何工作,任何想法?
beforeEach(module('socketwizApp', ['ngRoute']));
Run Code Online (Sandbox Code Playgroud)
和
beforeEach(module('ngRoute'));
beforeEach(module('socketwizApp'));
Run Code Online (Sandbox Code Playgroud)