2013-01-09 9 views
7

Meteor.loginWithPassword() साथ में एक उपयोगकर्ता में प्रवेश करके या Accounts.createUser (दोनों क्लाइंट साइड) के साथ एक नया बनाने, मैं उनकी कॉलबैक में पुष्टि कर सकते हैं कि Meteor.user() वास्तव में पूरी तरह से तैयार रिकॉर्ड का गुण होता है के बाद।Meteor.user() रिटर्न केवल अपने _ id

{ _id: "XXX", 
    profile: { 
    name: "Joe Shmoe", 
    thumbnail: "http://www.YYY.com/ZZZ.jpg" 
    }, 
    username: "joeshmoe" } 

इसके अलावा, the official docs,

डिफ़ॉल्ट रूप से के अनुसार, वर्तमान उपयोगकर्ता के उपयोगकर्ता नाम, ईमेल और प्रोफ़ाइल ग्राहक के लिए प्रकाशित कर रहे हैं।

तो, किसी को भी क्यों बता सकते जब मैं अपने टेम्पलेट में इन क्षेत्रों तक पहुँचने का प्रयास thusly

Template.login.user_name = function() { 
    return (Meteor.userId() ? Meteor.user().profile.name : '') 
}; 

यह Meteor.user() के कारण विफल रहता है केवल अपने वास्तविक गुण में से कोई भी साथ {_id: "XXX"} लौटने हो सकता है? अर्थात। उपयोगकर्ता निश्चित रूप से लॉग इन है, लेकिन उपयोगकर्ता ऑब्जेक्ट अचानक खो गया/इसकी सभी संपत्तियों को छुपा रहा है।

कोई भी जानता है कि समस्या क्या हो सकती है?

बहुत धन्यवाद।

संपादित करें:यह लिखने के इस समय नवीनतम संस्करण मीटियर 0.5.4 के साथ होता है। स्वीकृत उत्तर वास्तव में इस मुद्दे को हल करता है; कभी-कभी Meteor.userId() सर्वर से बाकी ऑब्जेक्ट पहुंचने से पहले ही मान्य है। सबको धन्यवाद।

+0

मैंने उन्हें सर्वर पर प्रकाशित करने और क्लाइंट पर उन्हें सदस्यता लेने की भी कोशिश की, लेकिन कोई बदलाव नहीं हुआ। मुझे ऐसा करने की ज़रूरत नहीं है। '// सर्वर Meteor.publish (" UserData ", function() { वापसी Meteor.users.find ({_ आईडी: this.userId} {क्षेत्रों: {प्रोफाइल: 1, उपयोगकर्ता नाम: 1}}); }); ... // ग्राहक Meteor.autosubscribe (function() { Meteor.subscribe ("UserData"); }); ' – cneuro

+0

तो मैं पूरे कॉल एक गेटर विधि में Meteor.methods में डाल दिया, पर शक सुरक्षा के लिए कुछ डीबी एक्सेसर्स को अस्वीकार करने के लिए टेम्पलेट संदर्भ, लेकिन यह वही समस्या है। '// ग्राहक Meteor.methods ({ उपयोगकर्ता नाम: फ़ंक्शन() { वापसी Meteor.user()। Profile.name; }); ... Template.login.user_name = function() { वापसी (Meteor.userId()? उल्का।कॉल ("userName"): '') }; ' – cneuro

+0

उल्का का संस्करण क्या है? –

उत्तर

11

यह संभव है कि डेटा अभी तक सर्वर से नहीं आया है। बस Meteor.userId की जांच करने के बजाय, यदि आप संपत्ति की जांच करते हैं तो क्या होता है?

Template.login.user_name = function() { 
    return Meteor.userId() && Meteor.user() && Meteor.user().profile ? Meteor.user().profile.name : ""; 
} 
+0

वास्तव में, ऐसा लगता है कि समस्या है। मुझे थोड़े संदेह था कि यह कुछ सौम्य था, मैंने अभी तक शेष वस्तु को स्पष्ट रूप से जांचने के लिए संज्ञानात्मक छलांग नहीं बनाई है, क्योंकि मैंने 'Meteor.userId()' पर भरोसा किया है या तो बाकी के साथ शून्य या मान्य होना चाहिए उपयोगकर्ता का आधार - सामग्री। उसके लिए धन्यवाद। – cneuro

1

मैं इस समस्या को पुन: पेश करने में सक्षम नहीं हूँ, लेकिन अगर आप UserID है, तो आप पूर्ण डेटाबेस, Meteor.users (यह पहले से ही इस करना चाहिए, भले ही) से सारी जानकारी मिल सकती है।

Template.login.user_name = function() { 
    return (Meteor.userId() ? Meteor.users.findOne({_id:Meteor.userId()}).profile.name : '') 
} 
+0

हां, मैंने भी कोशिश की थी लेकिन यह कॉल भी अनिर्धारित लौट रहा था, जैसे कि उपयोगकर्ता सृजन पर था और फिर गायब हो गया। यह इस तथ्य से समझाया जा सकता है कि ग्राहक सही प्रतिक्रिया को अनुकरण करता है (कई चीजों में से एक जो मैं उल्का के बारे में मानता हूं), फिर सर्वर तुरंत इसे सुधारता है, रिकॉर्ड अभी तक नहीं लिखा है, और बाद में केवल वैध है, जोरदार प्रयास । – cneuro

2

यह लॉगिनबथफ़ेसबुक का उपयोग करके भी मेरे साथ हुआ है। मैं इस फ़ंक्शन का उपयोग करता हूं, जिसने अब तक समस्याओं के बिना काम किया है:

var reallyLoggedIn = function() { 
    var user = Meteor.user(); 
    if (!user) return false; 
    else if (!user.profile) return false; 
    else return true; 
}; 

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

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