2013-08-07 5 views
9

द्वारा एक उल्का विधि को बुलाया गया था, मेरे पास कुछ Meteor methods है और मैं उन्हें सुरक्षित करना चाहता हूं ताकि केवल कुछ उपयोगकर्ता ही ग्राहक से उन्हें कॉल कर सकें। हालांकि सर्वर द्वारा इन विधियों का भी उपयोग किया जाता है। मुझे user.userid में userid पास कर दिया गया है, इसलिए मैं जांच सकता हूं कि उपयोगकर्ता लॉग इन है या नहीं और यदि उन्हें कॉल करने की अनुमति है, तो कोई समस्या नहीं है। लेकिन जब मुझे सर्वर पक्ष से विधि को कॉल करने की भी आवश्यकता होती है, तो मैं कैसे निर्धारित करूं कि यह एक सर्वर कॉल था इसलिए मैं विधि को निष्पादित करने की अनुमति दे सकता हूं। यह जांचने के लिए कि यह कोई सर्वर कॉल नहीं है, यह निर्धारित करने के लिए कोई भी नहीं है। उपयोगकर्ता सर्वर कॉल को अनधिकृत उपयोगकर्ताओं को विधि को कॉल करने की अनुमति देता है। मैं यह निर्धारित करने का एक तरीका ढूंढ रहा हूं कि सर्वर द्वारा विधि को कॉल किया गया था, इसलिए मैं इसे अनुमति दे सकता हूं और अभी भी अनधिकृत उपयोगकर्ताओं को विधि को कॉल करने से रोक सकता हूं।क्या यह निर्धारित करना संभव है कि सर्वर

Meteor.methods({ 
    makeCoffee: function (time) { 
    check(time, Number); 
    if(calledByServer || (Meteor.user() && Meteor.user().profile.usertype === 'coffee dude')){ 
      //Makin' Coffee 
    } 
    else 
     throw new Meteor.Error(404, "Can't find my pants"); 
    return "Coffee will be made at " + time; 
    } 
+2

शायद मेकॉफी वास्तव में सर्वर पर एक फ़ंक्शन है। क्लाइंट एक्सेस को इसे विधि में लपेटकर नियंत्रित किया जा सकता है जो उपयोगकर्ता आईडी की जांच करता है। सर्वर कॉल हमेशा फ़ंक्शन पर सीधे जाते हैं। – user728291

+0

सच है, यह समाधान है जिसका उपयोग मैं संभवतः समाप्त कर दूंगा। लेकिन मैं विभिन्न फाइबर में एकाधिक विधियों को चलाने के लिए इस .unblock() का उपयोग करने जैसे उल्का विधियों के कुछ फायदे छोड़ देता हूं। – Dsyko

उत्तर

12

this.connectionnull एक सर्वर साइड विधि के अंदर हो सकता है अगर विधि एक ग्राहक

से आमंत्रित नहीं किया गया this.connection docs देखें।

+0

क्या किसी को कोई समाधान मिला है जो विधि से भी जुड़े कार्यों में काम करेगा? जैसे ही आप ** ** ** में जाते हैं, तो 'यह। कनेक्शन' 'शून्य 'होगा (क्योंकि आप' इस' के लिए एक और जेएस संदर्भ दर्ज कर रहे हैं)। –

+0

@neopostmodern उसी समाधान का उपयोग क्यों नहीं करते जिसे हम हमेशा जावास्क्रिप्ट में उपयोग करते हैं? विधि 'var methodConn = this.connection' के अंदर - फिर आप अपने कॉलबैक फ़ंक्शंस से' methodConn' का उपयोग कर सकते हैं। –

+0

मैंने इसे मैनुअल में भी देखा लेकिन डूब गया - क्या यह सुरक्षित है? – Alveoli

4

लगता Meteor.call भी अब सर्वर साइड से कहा जा सकता है की तरह: http://docs.meteor.com/#meteor_call

मूल जवाब:

makeCoffee = function (time) { //code here } 

Meteor.methods({ 
    makeCoffeeMethod: function (time) { 
    if (calledByAllowedUser()) 
     return makeCoffee(time); 
    else 
     throw new Meteor.Error(403, 'Forbidden'); 
    } 
}); 

आप अब:

इसे इस तरह बनाओ प्रमाणीकरण को छोड़कर इसे सर्वर पर कॉल कर सकते हैं।

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