2016-11-24 8 views
7

रीडायरेक्ट के बाद कुकीज़ नहीं भेजता है node.js (हैपी फ्रेमवर्क का उपयोग करके) मैं अपने ऐप को उपयोगकर्ता खाते पढ़ने की अनुमति देने के लिए उपयोगकर्ता के लिए लिंक बना रहा हूं। Google उस अनुरोध को संभालता है और अनुमति देने के बारे में पूछता है। फिर Google मेरे सर्वर पर प्रतिक्रिया कोड के रूप में जीईटी पैरामीटर के साथ रीडायरेक्ट करता है और यहां मुझे कोई समस्या है।क्रोम

Google क्रोम सत्र आईडी के साथ कुकी नहीं भेज रहा है।

यदि मैं उस कुकी को कुकी संपादन एक्सटेंशन में सत्र कुकी के रूप में चिह्नित करता हूं, तो यह भेजा जाता है। PHP में वही व्यवहार, लेकिन सत्र बनाते समय php कुकी के रूप में कुकी के रूप में चिह्नित करता है, इसलिए यह समस्या नहीं है। मैं प्लगइन हैपी-ऑथ-कुकी का उपयोग कर रहा हूं, यह सत्र बनाता है और इसके बारे में सब कुछ संभालता है। मैं उस कुकी को तब भी हैपी-ऑथ-कुकी सेटिंग्स में गैर एचटीपी के रूप में चिह्नित करता हूं, क्योंकि यह पहला अंतर था, मैंने देखा है कि PHP सत्र कुकी और मेरा नोड.जे.एस. में मेरा निरीक्षण करते समय मैंने देखा है। मेरे पास प्रत्येक रीडायरेक्ट पर प्रतिक्रिया 401 अनुपलब्ध प्रमाणीकरण है। अगर मैं कर्सर को एड्रेस बार में रखता हूं और एंटर दबाता हूं, तो सब ठीक काम करता है, इसलिए यह रीडायरेक्ट के साथ एक मुद्दा है।

मेरा प्रश्न मूल रूप से, उस व्यवहार के कारण क्या हो सकता है। दूसरी ओर मुझे यह उल्लेख करना होगा कि किसी भी मुद्दे के बिना प्रत्येक अनुरोध के बाद फ़ायरफ़ॉक्स कुकी भेजता है।

हेडर रीडायरेक्ट के बाद (सत्र के साथ कोई भी कुकी):

{ 
    "host": "localhost:3000", 
    "connection": "keep-alive", 
    "cache-control": "max-age=0", 
    "upgrade-insecure-requests": "1", 
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", 
    "x-client-data": "CJS2eQHIprbJAQjEtskECKmdygE=", 
    "x-chrome-connected": "id=110052060380026604986,mode=0,enable_account_consistency=false", 
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    "accept-encoding": "gzip, deflate, sdch, br", 
    "accept-language": "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4" 
} 

हेडर (क्या तरीके से कार्य करेंगे) पता पट्टी में प्रवेश से टकराने के बाद:

{ 
    "host": "localhost:3000", 
    "connection": "keep-alive", 
    "cache-control": "max-age=0", 
    "upgrade-insecure-requests": "1", 
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", 
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    "accept-encoding": "gzip, deflate, sdch, br", 
    "accept-language": "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4", 
    "cookie": "SESSID=very_long_string" 
} 
+0

कृपया रीडायरेक्ट के लिए कोड दिखाएं। जांचने के लिए दो चीजें: क्या आप सत्र कुकी पर रूटपाथ सेट कर रहे हैं ताकि इसे साइट पर हर जगह से देखा जा सके? क्या आपका रीडायरेक्ट उसी डोमेन/पोर्ट/प्रोटोकॉल पर रीडायरेक्ट किया गया है जहां कुकी सेट है? – jfriend00

+0

हां, कुकी के पास पथ है:/और यह हर मार्ग पर ठीक काम करता है। Google हिट अनुमति देने के बाद Google मेरी साइट पर रीडायरेक्ट कर रहा है, इसलिए मेरे पास वह कोड नहीं है। और यह सब कुछ सैद्धांतिक रूप से ठीक है क्योंकि मैं एड्रेस बार में प्रवेश कर सकता हूं और फिर कुकी भेज दी जाती है। गूगल क्रोम बस नहीं भेज रहा है कुकी के बाद मेरे 'http करने के लिए गूगल से अनुप्रेषित: // स्थानीय होस्ट: 3000/एपीआई कोड = code_from_google' लेकिन अगर मैं कड़ी को कॉपी और पेस्ट करें, यह काम करता है। –

उत्तर

4

यह समस्या HAPI लेखन के कारण होता है -कुकी अभी तक सैमसाइट (हैपी की नई सुविधा) के साथ काम नहीं कर रहा है। हम इसे मैन्युअल रूप से सेट कर सकते हैं, उदाहरण के लिए।

const server = new Hapi.Server(
    connections: { 
     state: { 
      isSameSite: 'Lax' 
     } 
    } 
); 

लेकिन, प्राथमिक रूप से आप 'Strict' विकल्प होता है, और कई मामलों में आपको लगता है कि मान बदलने के लिए नहीं चाहते हो सकता है पर विचार करें।

+0

का उपयोग करते हुए 'SameSite के लिए Lax' समस्या के अपने उदाहरण के हल, लेकिन मैं उत्सुक हूँ: क्या हम वापस रीडायरेक्ट अनुरोध जब पर कुकी प्राप्त करने के लिए' cookieAuth.set' → 'reply.redirect' अनुक्रम के बारे में बदलने की जरूरत है 'isSameSite'' सख्त 'है? अगर हम पुनः लोड करते हैं, तो हमें कुकी मिलती है। 'सेट-कुकी' स्पष्ट रूप से काम कर रहा है। यह रीडायरेक्ट होने पर क्रोम कुकी को नहीं भेज रहा है, भले ही रीडायरेक्ट पूरी तरह योग्य हो। –

+0

मैं ऊपर [ '' 42,216,700] (के रूप में http://stackoverflow.com/questions/42216700/how-can-i-redirect-after-oauth2-with-samesite-strict- सवाल का एक अधिक पूर्ण रूप से उठाया गया है और-अभी भी मिल-मेरी-कुकीज़) –