8

我在 Rails 应用程序中使用 Devise 进行用户身份验证。我尝试在应用程序中使用 AngularJS 而不是默认的 rails 脚手架。问题是当我添加 before_filter :authenticate_user!在控制器中然后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 绑定到 angular。

如果我删除 before_filter :authenticate_user,一切都会完美!从控制器

class EmployeesController < ApplicationController
  #before_filter :authenticate_user!

仅当我尝试保存/更新/删除记录时才会出现问题,只需阅读它就可以了。

有任何想法吗??在使用 Angular 和 Devise 时,我应该遵循任何特定的指导方针吗?我是 rails 和 angularJS 的新手,因此将不胜感激详细的解释!谢谢

4

2 回答 2

10

您可以将其添加到您的app.js

myApp.config([
  "$httpProvider", function($httpProvider) {
    $httpProvider.defaults.headers.common['X-CSRF-Token'] = angular.element('meta[name=csrf-token]').attr('content');
  }
]);

它将 CSRF 令牌添加到所有 Angular 请求中。

编辑:现在 jQuery 独立(使用jqLit​​e)。

于 2013-04-08T08:57:59.917 回答
6

我发现我必须使用 CSRF 令牌。

http://ngmodules.org/modules/ng-rails-csrf

于 2013-03-11T09:19:24.153 回答