मैं एक रेल 5 एपीआई एप्लिकेशन (ApplicationController < ActionController::API
) है। इस एपीआई के एक एंडपॉइंट के लिए एक साधारण जीयूआई फॉर्म जोड़ने की जरूरत आई है।रेल 5 एपीआई protect_from_forgery
शुरू में मैं ActionView::Template::Error undefined method protect_against_forgery?
हो रही थी जब मैं प्रपत्र प्रस्तुत करना करने की कोशिश की। मैंने उस एंडपॉइंट पर include ActionController::RequestForgeryProtection
और protect_from_forgery with:exception
जोड़ा। जिसने उम्मीद के अनुसार उस मुद्दे को हल किया।
हालांकि, जब मैं इस फॉर्म को सबमिट करने का प्रयास करता हूं तो मुझे मिलता है: 422
Unprocessable Entity
ActionController::InvalidAuthenticityToken
। मैं <%= csrf_meta_tags %>
जोड़ दिया है और पता लगाया कि meta: csrf-param
और meta: csrf-token
मेरी हेडर में मौजूद हैं, और कहा कि authenticity_token
मेरी रूप में मौजूद है। (टोकन के लिए खुद को एक दूसरे से अलग कर रहे हैं।)
मैं कोशिश की है, protect_from_forgery prepend: true, with:exception
, कोई प्रभाव नहीं। मैं टिप्पणी करके इस समस्या को "ठीक" कर सकता हूं: protect_from_forgery with:exception
। लेकिन मेरी समझ यह है कि यह मेरे रूप में सीएसआरएफ सुरक्षा बंद कर रहा है। (मैं CSRF संरक्षण चाहते हैं।)
मैं क्या याद आ रही है?
अद्यतन:
यह स्पष्ट, इस एप्लिकेशन के 99% एक शुद्ध JSON RESTful API है बनाने की कोशिश करने के लिए। इस ऐप में एक HTML व्यू और फॉर्म जोड़ने की आवश्यकता आई है। तो एक नियंत्रक के लिए मैं पूर्ण सीएसआरएफ सुरक्षा सक्षम करना चाहता हूं। शेष ऐप को सीएसआरएफ की आवश्यकता नहीं है और अपरिवर्तित रह सकता है।
अद्यतन 2:
मैं सिर्फ एक और पारंपरिक रेल 5 एप्लिकेशन मैंने लिखा से इस एप्लिकेशन के HTML प्रपत्र और हैडर के पेज स्रोत की तुलना में। हैडर में authenticity_token
और रूप में authenticity_token
ही हैं। एपीआई ऐप में मुझे समस्या है, वे अलग हैं। शायद यह कुछ है?
अद्यतन 3:
ठीक है, मैं बेमेल नहीं है मुद्दा है। हालांकि, काम करने वाले और गैर-काम करने वाले ऐप्स के बीच और तुलना में मैंने देखा कि नेटवर्क> कुकीज में कुछ भी नहीं है। मैं काम करने वाले ऐप की कुकीज़ में _my_app-session
जैसी चीजों का एक गुच्छा देखता हूं।
यह अप्रत्याशित रूप से स्पष्ट नहीं है कि आपको एपीआई मोड में form_tag का उपयोग पहली जगह क्यों करना होगा। एपीआई मोड का विचार आपके बैकएंड को शुद्ध डेटा एंडपॉइंट के रूप में किसी भी UI प्रतिनिधित्व उत्पन्न करने के लिए ज़िम्मेदार नहीं है। –
@ फ़ैब्रिज़ियोबर्टोग्लियो नहीं, न तो मैंने जो कहा है, न ही आपका कथन सत्य है। यह संभव है कि आपको एपीआई ऐप्स में सीएसआरएफ हमलों के बारे में चिंता करने की ज़रूरत है। एक उदाहरण है कि आपको सीएसआरएफ के बारे में चिंता करने की ज़रूरत है कि जब आपकी एपीआई सेवा कुकीज़ का उपयोग करती है। –