2013-03-08 15 views
8

私はRailsアプリケーションでユーザー認証のためにDeviseを使用しています。私はアプリケーションでデフォルトのレール足場の代わりにAngularJSを使用しようとしました。問題は、before_filter:authenticate_userを追加したときです。コントローラでは、リソースの更新/保存および削除のためのAngularJS呼び出しは、Unauthorized Access(401)とは言いません。Rails - DeviseとAngularJSを使用した認証エラー

リソース:

@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を使用した角度。

before_filter:authenticate_userを削除すると、すべてが完璧に機能します。コントローラーから

class EmployeesController < ApplicationController 
    #before_filter :authenticate_user! 

問題は、レコードを保存/更新/削除しようとしたときにのみ発生し、読み取るだけでOKです。

AngularとDeviseを使用するときに従うべき具体的なガイドラインはありますか? 私はレールとangularJSの初心者ですので、詳細な説明をお待ちしております! ありがとう

+0

$ httpProviderのデフォルトに 'withCredentials'パラメータを渡してみましたか? '' $ httpProvider '、function($ httpProvider){$ httpProvider.defaults.withCredentials = true;}])) '? – Stewie

+0

以下を追加しましたが、残念ながら動作しませんでした。 @app = angular.module( "Mathra"、["ngResource"])。config(['$ httpProvider'、($ httpProvider) - > $ httpProvider.defaults.withCredentials = true ]) – jkotzi

答えて

6

私はCSRFトークンを使用しなければならないことを知りました。

​​

10

あなたのapp.jsにこれを追加することができます。すべての角度の要求にCSRFトークンを追加

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

編集:今すぐjQueryに依存しません(jqLiteを使用)。

関連する問題