मेरे पास फ़ंक्शन है जिसमें यह जांचने के लिए कुछ कोड है कि उपयोगकर्ता प्रमाणीकृत है या नहीं

export const addAffiliate = functions.region('us-central1').https.onCall(
  async (inputData: any, context: functions.https.CallableContext) => {
    checkAuthentication(context);
    ...
export const checkAuthentication = (
  context: functions.https.CallableContext
) => {
  // Checking that the user is authenticated.
  if (!context.auth) {
    // Throwing an HttpsError so that the client gets the error details.
    throw new functions.https.HttpsError(
      'failed-precondition',
      'The function must be called ' + 'while authenticated.'
    );
  }
};

इसका परीक्षण करने के लिए, मैं gcloud auth print-identity-token कमांड का उपयोग करके टोकन उत्पन्न करता हूं, इसे "बियरर" + टोकन मान के साथ प्राधिकरण शीर्षलेख में पेस्ट करता हूं और इसे सफल प्रतिक्रिया प्राप्त करने के लिए आमंत्रित करता हूं। local test

हालांकि, जब मैं फ़ंक्शन को तैनात करता हूं, तो यह checkAuthentication विधि तक भी नहीं पहुंचता है। यह तुरंत अनधिकृत प्रतिक्रिया (401) देता है। वर्कफ़्लो जहां मैं प्रमाणीकरण शीर्षलेख प्रदान नहीं करता ठीक काम करता है, मुझे उम्मीद के मुताबिक 400 मिलते हैं। मैं इस व्यवहार को स्थानीय रूप से तभी पुन: पेश कर सकता हूं जब मैं कुछ कचरा मूल्य को शीर्षलेख में प्रदान करता हूं।

{
    "error": {
        "message": "Unauthenticated",
        "status": "UNAUTHENTICATED"
    }
}

फ़ंक्शन प्रारंभ करने के लिए सेवा खाता क्रेडेंशियल का उपयोग करता है। परिनियोजित कार्यों में अनुमतियाँ इसके और मेरे खाते सूचीबद्ध हैं। परिनियोजित फ़ंक्शन के आईडी टोकन को पढ़ने में सक्षम नहीं होने का क्या कारण हो सकता है? यहां छवि विवरण दर्ज करें

0
Yegor Androsov 23 नवम्बर 2020, 13:28

1 उत्तर

सबसे बढ़िया उत्तर

कोई संदर्भ नहीं मिल रहा है, लेकिन ऐसा लगता है कि दोनों मामलों (स्थानीय और दूरस्थ) में केवल फायरबेस प्रमाणीकरण काम करता है। मेरे मामले में, मुझे Google खाता आईडी टोकन का उपयोग नहीं करना चाहिए, लेकिन एक फायरबेस उपयोगकर्ता आईडी टोकन जिसने Google खाते को बाहरी प्रदाता खाते के रूप में लिंक किया है।

1
Yegor Androsov 23 नवम्बर 2020, 14:27