我正在使用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)。

10-05 22:55
查看更多