मैं Google प्रमाणीकरण प्रदाता का उपयोग करने का प्रयास कर रहा हूं और फिर डेटा तक पहुंच प्रतिबंधित करने के लिए डेटाबेस नियम में एक प्रमाणीकृत उपयोगकर्ता के लिए जानकारी का उपयोग कर रहा हूं। उदाहरण के लिए, मान लें कि मैं अपनी Google आईडी me@gmail.com से साइन इन करता हूं।

निम्नलिखित की तरह कुछ (फायरस्टोर डॉक्स से लिया गया):

    let provider = new firebase.auth.GoogleAuthProvider();
    let result = await firebase.auth().signInWithPopup(provider);

    let token = result.credential.accessToken;
    let user = result.user;
    // ...

उपरोक्त में user.email इस समय me@gmail.com होगा।

अब मैं डेटा को लिखने की अनुमति देने के लिए नियम में उस जानकारी का उपयोग कैसे करूं? मैंने सोचा कि यह कुछ ऐसा होगा:

    match /events/{events} {
        allow write: if request.auth.uid = // Something?
    }

लेकिन मैं यह नहीं समझ सकता कि यूआईडी से तुलना कैसे करें। आदर्श रूप से यह ईमेल पता होगा (यानी कुछ मानव-पठनीय)।

यहां मेरा लक्ष्य यह है कि मैं व्यवस्थापक के रूप में अधिकृत उपयोगकर्ताओं की एक सूची रखता हूं, और तब वे मेरे ऐप में लॉग इन कर सकते हैं और डेटा तक पहुंच सकते हैं।

2
Dan Sturman 9 सितंबर 2019, 05:24

1 उत्तर

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

जैसे डौग स्टीवेन्सन ने टिप्पणियों में लिखा है कि आपको request.auth.token.email का उपयोग करना है। यदि आप अपने सुरक्षा नियमों में ईमेल की तुलना करना चाहते हैं, तो आपको उपयोगकर्ता के ईमेल पते को अपने फायरस्टोर डीबी में भी स्टोर करना होगा ताकि आप इस तरह तुलना कर सकें:

match /events/{events} {
        allow write: if request.auth.token.email == resource.data.email; 
    }

या आप इसे यूआईडी के साथ इस तरह करते हैं:

match /events/{events} {
        allow write: if request.auth.uid = resource.data.uid; 
    }

बेशक आपको यूआईडी को अपने फायरस्टोर डीबी में भी स्टोर करना होगा।

0
Constantin Beer 9 सितंबर 2019, 02:35