2013-02-03 15 views
39

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

मेरा प्रश्न है क्या ग्राहक के पक्ष में Firebase पुस्तकालय और NodeJS पुस्तकालय का उपयोग करते समय प्रमाणीकरण कर सरल ईमेल & पासवर्ड एपीआई का उपयोग कर के संबंध में सबसे अच्छा तरीका। यदि मैं प्रमाणीकरण क्लाइंट पक्ष करता हूं और उसके बाद नोडजेएस पक्ष पर एक अलग मार्ग पर कॉल करता हूं तो उस उपयोगकर्ता के प्रमाणीकरण अनुरोध में किए जाएंगे। उपयोगकर्ता का परीक्षण करने का दृष्टिकोण नोड के भीतर प्रमाणित किया जाएगा।

एक दृष्टिकोण मुझे लगता है कि वर्तमान उपयोगकर्ता उपयोगकर्ता नाम & फ़ायरबेस से पासवर्ड प्राप्त करना है और फिर इन्हें नोडजेएस पर पोस्ट करें और फिर परीक्षण के लिए सर्वर पर फायरबेस सुरक्षा API का उपयोग करें।

उत्तर

56

अनिवार्य रूप से समस्या यहाँ आप सुरक्षित रूप से अपने NodeJS सर्वर जो ग्राहक Firebase के रूप में प्रमाणीकृत है को संप्रेषित करने के लिए की जरूरत है। इसके बारे में आप कई तरीकों से जा सकते हैं, लेकिन संभवतः आपके सभी क्लाइंट < -> नोडजेएस संचार फ़ायरबेस के माध्यम से जाना आसान है।

बजाय ग्राहक होने का एक REST एंडपॉइंट अपने NodeJS सर्वर के द्वारा मारा, एक Firebase स्थान है कि आपके NodeJS सर्वर निगरानी है करने के लिए ग्राहक लिखने की है। फिर आप क्लाइंट द्वारा लिखे गए डेटा को सत्यापित करने के लिए फायरबेस सुरक्षा नियमों का उपयोग कर सकते हैं और आपका सर्वर इस पर भरोसा कर सकता है।

उदाहरण के लिए, यदि आप इसे बनाने के लिए इतना प्रयोक्ता (आपके NodeJS सर्वर वास्तव में ईमेल भेजने की देखभाल करने के साथ) अपने अनुप्रयोग के माध्यम से मनमाने ढंग से ईमेल भेज सकते हैं चाहता था, तो आप इस तरह के नियम कुछ के साथ एक/emails_to_send स्थान हो सकता है:

{ 
    "rules": { 
    "emails_to_send": { 
     "$id": { 
     ".write": "!data.exists() && newData.child('from').val() == auth.email", 
     ".validate": "newData.hasChildren(['from', 'to', 'subject', 'body'])" 
     } 
    } 
    } 
} 

तो ग्राहक में आप कर सकते हैं:

ref.child('emails_to_send').push({ 
    from: '[email protected]', 
    to: '[email protected]', 
    subject: 'hi', 
    body: 'Hey, how\'s it going?' 
}); 

और अपने NodeJS कोड में आप अपने Firebase गुप्त के साथ) .auth कह सकते हैं ((ताकि आप पढ़ सकते हैं और सब कुछ लिखने) और फिर कार्य करें:

ref.child('emails_to_send').on('child_added', function(emailSnap) { 
    var email = emailSnap.val(); 
    sendEmailHelper(email.from, email.to, email.subject, email.body); 

    // Remove it now that we've processed it. 
    emailSnap.ref().remove(); 
}); 

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

+2

महान सलाह Thats - धन्यवाद। शायद इस प्रकार की वास्तुकला सलाह को शामिल करने के लिए फायरबेस दस्तावेज़ों का विस्तार किया जा सकता है। – markbarton

+3

अच्छा बिंदु। मैं देखूंगा कि हम क्या कर सकते हैं। :-) –

+0

इस तरह, ईमेल भेजने पर से निपटने त्रुटि Firebase के माध्यम से भी किया जाना चाहिए ... FYI करें – tomericco

0

उपर्युक्त चीजों को करने का एक चौराहे जैसा लगता है, मैं https://www.npmjs.com/package/connect-session-firebase जैसे कुछ का उपयोग करता हूं और एक्सप्रेस के माध्यम से सभी मार्गों को संभालने के लिए मॉडल के रूप में फायरबेस को रखता हूं। आसान है यदि आपका एक्सप्रेस सर्वर टेम्पलेट्स प्रस्तुत कर रहा है और सिर्फ JSON API के रूप में व्यवहार नहीं कर रहा है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^