मुझे लगता है कि DOM से CSRF-value पढ़ना एक अच्छा समाधान नहीं है, यह सिर्फ एक समाधान है।
यहाँ एक दस्तावेज़ प्रपत्र angularJS की आधिकारिक वेबसाइट http://docs.angularjs.org/api/ng.$http :
चूंकि केवल जावास्क्रिप्ट जो आपके डोमेन पर चलता है, कुकी को पढ़ सकता है, आपके सर्वर को आश्वासन दिया जा सकता है कि आपके डोमेन पर चलने वाले जावास्क्रिप्ट से XHR आया था।
इसका (CSRF सुरक्षा) लाभ उठाने के लिए, आपके सर्वर को पहले HTTP GET अनुरोध पर XSRF-TOKEN नामक जावास्क्रिप्ट पठनीय सत्र कुकी में टोकन सेट करने की आवश्यकता है। बाद में गैर-जीईटी अनुरोधों पर सर्वर सत्यापित कर सकता है कि कुकी X-XSRF-TOKEN HTTP हेडर से मेल खाती है
यहाँ उन निर्देशों के आधार पर मेरा समाधान है:
सबसे पहले, कुकी सेट करें:
# app/controllers/application_controller.rb
# Turn on request forgery protection
protect_from_forgery
after_action :set_csrf_cookie
def set_csrf_cookie
cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
end
फिर, हमें हर गैर-जीईटी अनुरोध पर टोकन को सत्यापित करना चाहिए।
चूंकि रेल पहले से ही इसी तरह की विधि के साथ बनाई गई है, हम अपने तर्क को जोड़ने के लिए बस इसे ओवरराइड कर सकते हैं:
# app/controllers/application_controller.rb
protected
# In Rails 4.2 and above
def verified_request?
super || valid_authenticity_token?(session, request.headers['X-XSRF-TOKEN'])
end
# In Rails 4.1 and below
def verified_request?
super || form_authenticity_token == request.headers['X-XSRF-TOKEN']
end