Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Rails-Desive和AngularJS的身份验证错误_Ruby On Rails_Authentication_Devise_Angularjs - Fatal编程技术网

Ruby on rails 使用Rails-Desive和AngularJS的身份验证错误

Ruby on rails 使用Rails-Desive和AngularJS的身份验证错误,ruby-on-rails,authentication,devise,angularjs,Ruby On Rails,Authentication,Devise,Angularjs,我正在Rails应用程序中使用Desive进行用户身份验证。我尝试在应用程序中使用AngularJS而不是默认的rails脚手架。问题是,当我添加before\u过滤器时:authenticate\u user!在控制器中,AngularJS调用更新/保存和删除资源,表示未经授权的访问无效(401)。下面是一些代码: 资源: @app.factory "employeesDB", ($resource) -> $resource("/employees/:id", {id: "@id"

我正在Rails应用程序中使用Desive进行用户身份验证。我尝试在应用程序中使用AngularJS而不是默认的rails脚手架。问题是,当我添加before\u过滤器时:authenticate\u 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模型绑定到angular

如果我删除before\u过滤器:authenticate\u user,一切都会很完美!从控制器

class EmployeesController < ApplicationController
  #before_filter :authenticate_user!
class EmployeesController
只有当我尝试保存/更新/删除记录时,问题才会出现,只要读取它就可以了

有什么想法吗??在使用Angular和Desive时,我应该遵循哪些特定的指南? 我是rails和angularJS的新手,请详细解释!
谢谢

我发现我必须使用CSRF令牌


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

myApp.config([
  "$httpProvider", function($httpProvider) {
    $httpProvider.defaults.headers.common['X-CSRF-Token'] = angular.element('meta[name=csrf-token]').attr('content');
  }
]);
将CSRF令牌添加到所有角度请求中


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

您是否尝试将
with credentials
参数传递给$httpProvider默认值<代码>app.config(['$httpProvider',函数($httpProvider){$httpProvider.defaults.withCredentials=true;}])?添加了以下内容,但不幸的是它不起作用。我也遇到同样的问题。@app=angular.module(“Mathra”,[“ngResource”]).config(['$httpProvider',($httpProvider)->$httpProvider.defaults.withCredentials=true])