我正在使用Devise在Rails应用程序中进行用户身份验证。我试图在应用程序中使用AngularJS而不是默认的rails scaffolding。问题是当我添加before_filter:authenticate_user时!在 Controller 中,然后AngularJS调用更新/保存和删除资源不起作用,提示未授权访问(401)。这是一些代码:
资源:
@app.factory "employeesDB", ($resource) ->
$resource("/employees/:id", {id: "@id"}, {update: {method: "PUT"}},
{destroy: {method: "DELETE"}}
)
保存操作:
$scope.saveEmpl = ->
$scope.em = new Object if !$scope.em
employeesDB.save({}, $scope.em, (resource) ->
$scope.employees.push(resource)
, (response) ->
console.log("Failed")
)
$ scope.em是包含记录数据的对象,并使用ng-model绑定(bind)到angular。
如果我删除before_filter:authenticate_user,一切都将完美完成!从 Controller
class EmployeesController < ApplicationController
#before_filter :authenticate_user!
仅当我尝试保存/更新/删除记录时,才出现问题,只需阅读即可。
有任何想法吗??使用Angular和Devise时,我应该遵循哪些特定的指导原则?
我是Rails和angularJS的新手,所以详细的解释将不胜感激!
谢谢
最佳答案
您可以将其添加到app.js
中:
myApp.config([
"$httpProvider", function($httpProvider) {
$httpProvider.defaults.headers.common['X-CSRF-Token'] = angular.element('meta[name=csrf-token]').attr('content');
}
]);
将CSRF token 添加到所有Angular请求中。
编辑:现在与jQuery无关(使用jqLite)。