2013-03-08 9 views
8

मैं रेल अनुप्रयोग में उपयोगकर्ता प्रमाणीकरण के लिए डेविस का उपयोग कर रहा हूं। मैंने एक आवेदन में डिफ़ॉल्ट रेल मचान के बजाय AngularJS का उपयोग करने की कोशिश की। समस्या यह है कि जब मैं first_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 रिकार्ड के लिए डेटा वाली वस्तु है और यह करने के लिए बाँध है एनजी मॉडल का उपयोग कर कोणीय।

अगर मैं पहले_फिल्टर को हटाता हूं तो सबकुछ सही काम करता है: प्रमाणीकरण_यूसर! नियंत्रक से

class EmployeesController < ApplicationController 
    #before_filter :authenticate_user! 

समस्या तब होती है जब मैं रिकॉर्ड को सहेजने/अपडेट/हटाने की कोशिश करता हूं, बस इसे पढ़ना ठीक है।

कोई विचार ?? क्या कोणीय और देवता का उपयोग करते समय मुझे कोई विशिष्ट गाइडलाइन का पालन करना चाहिए? मैं रेल और कोणीय जेएस के लिए नौसिखिया हूं इसलिए एक विस्तृत स्पष्टीकरण की सराहना की जाएगी! धन्यवाद

+0

क्या आपने अपने $ httpProvider डिफ़ॉल्ट पर 'Credentials' पैरामीटर को पारित करने का प्रयास किया है? 'app.config (['$ httpProvider', फ़ंक्शन ($ httpProvider) {$ httpProvider.defaults.withCentialentials = true;}]);'? – Stewie

+0

निम्नलिखित जोड़ा गया, लेकिन दुर्भाग्य से यह काम नहीं किया। मुझे एक ही समस्या मिलती है। @ एप = angular.module ("मथरा", ["एनजी रिसोर्स"])। कॉन्फ़िगर (['$ httpProvider', ($ httpProvider) -> $ httpProvider.defaults.withCredentials = true ]) – jkotzi

उत्तर

10

आप अपने app.js को यह जोड़ सकते हैं:

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

कौन सा सब कोणीय अनुरोध करने के लिए CSRF टोकन जोड़ें।

संपादित करें: अब jQuery स्वतंत्र (jqLite का उपयोग करें)।

संबंधित मुद्दे