有没有办法将$httpProvider标题设置在外面angular.module('myApp', []).config()?
我在登录用户后从服务器获取Auth-Token,我需要将其作为HTTP Header添加到所有后续请求中.
我正在使用Rails进行单页应用程序.登录和注销时,使用ajax调用Devise控制器.我得到的问题是,当我1)登录2)退出然后再次登录不起作用.
我认为它与CSRF令牌有关,当我退出时它会被重置(虽然它不应该是afaik),并且因为它是单页,旧的CSRF令牌正在xhr请求中发送,从而重置会话.
更具体地说,这是工作流程:
WARNING: Can't verify CSRF token authenticity在服务器日志中打印)任何线索非常感谢!如果我可以添加更多详细信息,请与我们联系.
我正在尝试构建一个角度+ laravel休息应用程序.我可以获得我的数据库的视图.当我尝试添加新项目时.我500 error告诉我错配csrf令牌.我的表单布局是:
<form class="form-horizontal" ng-submit="addItem()">
<input type="text" ng-model="itemEntry" placeholder="Type and hit Enter to add item">
</form>
Run Code Online (Sandbox Code Playgroud)
这是我尝试将项添加到数据库的方式:
$scope.addItem = function(CSRF_TOKEN) {
$http.post('/shop', { text: $scope.itemEntry, csrf_token: CSRF_TOKEN} ).success(function(data, status) {
if(data) {
var last = _.last($scope.items);
_token = CSRF_TOKEN;
$scope.items.push({text: $scope.itemEntry, bought: false, id: (last.id + 1) });
$scope.itemEntry = '';
console.log($scope.items);
} else {
console.log('There was a problem. Status: ' + status + '; Data: ' + data);
}
}).error(function(data, status) {
console.log('status: ' + status); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个简单的网站,让管理员创建问题,用户解决它们.我使用ActiveAdmin作为管理部分,使用简单的AJAX调用来解决部分用户问题.尝试通过ActiveAdmin :: Devise登录最初是成功的,但无法登出.我删除了所有cookie,从那以后,如果没有CSRF令牌真实性异常,我无法进行POST操作.我在application.html.erb的头部有正确的meta_tags,声明了jquery_ujs(其他线程说它是一个常见问题),在两个POST操作中都存在真实性令牌.我甚至试图通过skip_before_filter避免验证:verify_authenticity_token但ActiveAdmin登录和POST示例仍然失败.日志在下面,您可以看到令牌存在.我还展示了Gemfile,以防任何一个破坏CSRF的东西.
提前致谢.
application.html.erb
<head>
<title>Introducción Matematicas</title>
<%= stylesheet_link_tag "application", media: "all"%>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<link href="http://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700|Roboto+Slab:300,400" rel="stylesheet" type="text/css">
<%= csrf_meta_tags %>
</head>
Run Code Online (Sandbox Code Playgroud)
的application.js
//= require jquery
//= require jquery_ujs
//= require_tree ../../../vendor/assets/javascripts/.
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
应用控制器
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :null_session
#skip_before_filter :verify_authenticity_token
before_filter …Run Code Online (Sandbox Code Playgroud) 好。我正式对这个问题失去了理智。
我们使用默认的Rails应用程序(5,但我也尝试使用4默认应用程序)。
我正在尝试使用一个简单的javascript代码将ajax POST请求发送到一个控制器动作。
在我的ApplicationController代码中:
class ApplicationController < ActionController::Base
after_action :set_csrf_cookie
protected
def set_csrf_cookie
cookies["X-CSRF-Token"] = form_authenticity_token
end
end
Run Code Online (Sandbox Code Playgroud)
设置"X-CSRF-Token"值为的Cookie form_authenticity_token。
之后,我可以使用以下代码在SPA(单页应用程序)中读取此cookie:
<script>
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(";");
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) === " ") c = c.substring(1, c.length);
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
// …Run Code Online (Sandbox Code Playgroud)