Angular + Rails:POST 请求 422/CSRF 错误
Posted
技术标签:
【中文标题】Angular + Rails:POST 请求 422/CSRF 错误【英文标题】:Angular + Rails: POST request 422/CSRF error 【发布时间】:2016-10-23 07:12:15 【问题描述】:我不断得到:
无法验证 CSRF 令牌的真实性 在 2 毫秒内完成 422 个不可处理的实体(ActiveRecord:0.0 毫秒)
我正在尝试发出 $http 请求以发布新的数据库条目。在 RoR 上使用 Angular。
在我的 Angular 控制器中:
...
$scope.createArea = function(data)
var areaData = $scope.areaData;
var url = '/locations/' + locationService.id + '/floors/' + floorService.id + '/areas.json'
$http(
url: url,
method: 'POST',
contentType: "application/json",
data: areaData
);
;
我的表格:
<div class="form-horizontal" id="new-area" ng-controller="mapsController">
<form ng-submit="createArea(areaData)">
<div id="name-group" class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control" placeholder="Area Name" ng-model="areaData.name" /><br />
<label>Group</label>
<select class="form-control">
<option ng-repeat="group in groups" value="group.id" ng-model="areaData.groupID">group.name</option>
</select>
</div>
<button type="submit" class="btn btn-default">Create</button>
</form>
</div>
在我的 Rails 控制器中:
def create
respond_to do |format|
format.json
end
end
【问题讨论】:
通常在向 Rails 端点发送请求之前,您需要一个拦截器来创建某种类型的 JWT。这是现有应用程序还是新应用程序。 现有。只是将一些功能转移到 Angular。我之前提出过没有问题的请求,但是通过 jQuery 而不是 Angular。 我认为这篇文章对此进行了详细说明:***.com/questions/14734243/…. 【参考方案1】:找到答案:将 gem 'angular_rails_csrf' 添加到我的 gemfile 中。文档:https://github.com/jsanders/angular_rails_csrf
【讨论】:
以上是关于Angular + Rails:POST 请求 422/CSRF 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular 4 Universal 中发出 http post 请求?
如何使用 Angular 2 在 POST 上启用 ASP.NET MVC 4 中的跨源请求
Angular2,REST 服务 POST 调用错误:“跨源请求被阻止”
即使 Rails 服务器配置为接受所有请求,Angular 发布请求也未通过预检