2012-10-06 6 views
12

पहला सम्मिलन ठीक काम करता है, लेकिन दूसरा कंसोल में "सम्मिलित विफल: 403 - एक्सेस अस्वीकृत" देता है। ऑटो सब्सक्राइब सक्षम है, और मैं ऑथ शाखा पर हूं। मैं अपना कोड कैसे स्थापित करूं ताकि मेरे पास एक सर्वर मोंगोडीबी हो जो ग्राहक लिख सकते हैं?उल्का मोंगो सम्मिलित असफल - एक्सेस अस्वीकृत

People = new Meteor.Collection('people'); 

if (Meteor.is_server) { 
People.insert({name: 'Bob'}); 
} 
if (Meteor.is_client) { 
People.insert({name: 'Bob'}); 
} 
+0

आप प्रमाणन शाखा पर कर रहे हैं जोड़ने के साथ इसे हल कर सकते हैं? –

+0

हां, मैं ऑथ शाखा पर हूं। – Alex

+0

ठीक है, तो मुझे लगता है कि ऐसा इसलिए है क्योंकि मेरे पास कोई सम्मिलित सत्यापनकर्ता नहीं है ... – Alex

उत्तर

18

क्योंकि आप ऑथ के साथ काम कर रहे हैं, आपको ग्राहकों को आवेषण, अपडेट, हटाने और लाने की कोशिश करनी चाहिए या इनकार करना होगा। इस विशिष्ट समस्या को ठीक करने के लिए आपको क्लाइंट के सम्मिलित कार्य को जाने के लिए Collection.allow() को जोड़ना होगा।

if(Meteor.is_server) { 

    People.allow({ 
    'insert': function (userId,doc) { 
     /* user and doc checks , 
     return true to allow insert */ 
     return true; 
    } 
    }); 

} 
+5

अनुभवहीन पाठक के लिए एक साइड नोट के रूप में: इस उत्तर में कोड स्निपेट आपके मामले के लिए सुरक्षित नहीं हो सकता है। यह स्निपेट _any_ क्लाइंट को संबंधित संग्रह (यानी, लोग) अपडेट करने की अनुमति देता है। यदि आप उल्का के नए खाते API (http://docs.meteor.com/#accounts_api) का उपयोग कर रहे हैं, तो आपको लॉग इन उपयोगकर्ता पर एक चेक वापस करने की आवश्यकता है (उदाहरण के लिए, उपयोगकर्ता iD && doc.owner === userId, जहां मालिक आपके संग्रह की एक प्राप्त विशेषता है)। http://docs.meteor.com/#allow – dgraziotin

+0

में उदाहरण अनुभाग देखें मुझे इसे काम करने के लिए is_server नेमस्पेस के बाहर रखना था। – radtek

8

संग्रह लोगों में विधि अनुमति() का उपयोग करें। यह विधि सीआरयूडी एक्सेस असाइन करें।

function adminUser(userId) { 
    var adminUser = Meteor.users.findOne({username:"admin"}); 
    return (userId && adminUser && userId === adminUser._id); 
} 
Lugares.allow({ 
    insert: function(userId, lugar){ 
    return adminUser(userId); 
    }, 
    update: function(userId, lugares, fields, modifier){ 
    return adminUser(userId); 
    }, 
    remove: function (userId, docs){ 
    return adminUser(userId); 
    } 
}); 
+1

क्यों 'लूगारे'? शायद यह 'लोग' होना चाहिए? – Artemix

+1

यह उत्तर वास्तव में प्रश्न से संबंधित नहीं है? –

+0

यह क्यों कम हो गया? यह तीन अनुमति कार्यों को दिखाता है जिन्हें आपको हैंडलर जोड़ने की आवश्यकता है। इसके अलावा इस कोड को क्लाइंट और सर्वर पर चलाने की आवश्यकता है, इसलिए यह अधिक उपयुक्त है। (क्लाइंट साइड यह कॉल करने के परिणामों की पूर्व-गणना करता है और सर्वर राउंड ट्रिप छोड़ देता है। – MrMowgli

3

मैं इस त्रुटि के बाद मैं अपने प्रोजेक्ट से असुरक्षित पैकेज निकाले गए सामना किया है।

meteor remove insecure 

मेरी समस्या का समाधान करने के बाद।

Posts = new Meteor.Collection('posts'); 

Posts.allow({ 
    insert: function(userId, doc) { 
    // only allow posting if you are logged in 
    return !! userId; 
    } 
}); 
+0

एक Meteor.methods सेट अप करना और फिर क्लाइंट पर Meteor.call ('methodname', params) द्वारा कॉल करना, इसे ठीक करेगा संदर्भ: https://www.meteor.com/tutorials/blaze/security-with-methods – rdk1992

2

आप केवल इस तरह के सरल-सब ट्यूटोरियल के रूप में परियोजना का परीक्षण किया है, तो आप असुरक्षित पैकेज

meteor add insecure 

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

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