2015-05-05 4 views
8

मैं Accounts.createUser() के साथ नया उपयोगकर्ता बना रहा हूं और यदि आप कुछ भी फैंसी नहीं कर रहे हैं तो यह सामान्य रूप से काम करता है। लेकिन मैं कुछ अन्य फ़ील्ड को नए उपयोगकर्ता में जोड़ना चाहता हूं जो दस्तावेज़ीकरण पर सूचीबद्ध नहीं हैं। यहां मेरा कोड है:accounts.onCreateUser नए उपयोगकर्ताओं, अच्छे प्रथाओं को बनाते समय अतिरिक्त विशेषताओं को जोड़ रहा है?

var options = { 
    username: "funnyUserNameHere", 
    email: "[email protected]", 
    password: "drowssap", 
    profile: { 
     name: "Real Name" 
    }, 
    secretAttribute: "secretString" 
}; 

var userId = Accounts.createUser(options); 

इस उदाहरण में मैंने अपने विकल्प ऑब्जेक्ट में secretAttribute जोड़ा है। चूंकि यह दस्तावेज नहीं है, यह उचित है कि यह उपयोगकर्ता ऑब्जेक्ट के तहत मेरी विशेषता नहीं जोड़ रहा है।

तो मैं googled और पता लगा कि कुछ इस तरह काम कर सकते हैं:

Accounts.onCreateUser(function(options, user) { 
    if (options.secretAttribute) 
     user.secretAttribute = options.secretAttribute; 

    return user; 
}); 

और हाँ! यह काम करता है, लेकिन हमेशा बटन होता है .. * लेकिन .. इसके बाद यह उपयोगकर्ता ऑब्जेक्ट के तहत प्रोफ़ाइल को सहेज नहीं रहा है। हालांकि यह काम करता है:

Accounts.onCreateUser(function(options, user) { 
    if (options.secretAttribute) 
     user.secretAttribute = options.secretAttribute; 

    if (options.profile) 
     user.profile = options.profile; 

    return user; 
}); 

तो मैं आपसे क्या चाहता हूं?

  1. मैं जानना चाहता हूं कि क्यों मेरे मामले में क्रिएट यूज़र प्रोफाइल खो देता है (उपरोक्त फिक्स से पहले)?
  2. क्या मेरा दृष्टिकोण अच्छा अभ्यास है?
  3. क्या उन्हें बनाने के दौरान उपयोगकर्ता ऑब्जेक्ट के लिए अतिरिक्त विशेषताओं को जोड़ना बेहतर समाधान है?

ps: मैं सोचता यह स्पष्ट है कि मैं क्यों प्रोफ़ाइल के तहत सभी अतिरिक्त क्षेत्रों को बचाने के लिए नहीं करना चाहते हैं;)

उत्तर

4

खैर यह इतनी मेहनत .. यहाँ यह दस्तावेज में खड़ा नहीं था: "डिफ़ॉल्ट बनाने उपयोगकर्ता फ़ंक्शन बस नए उपयोगकर्ता दस्तावेज़ में विकल्प .profile कॉपी करता है। CreateUser पर कॉल करना डिफ़ॉल्ट हुक ओवरराइड करता है। " - Accounts.onCreateUser

+0

वहाँ मूल implementaion कॉल करने के लिए एक व्यवस्थित तरीका है? जैसे 'सुपर' – ApriOri

0

इस प्रयास करें:

Accounts.onCreateUser((options, user) => (Object.assign({}, user, options))); 
+4

क्या आप समझा सकते हैं कि कोड प्रदान करने की बजाय समस्या का यह एक अच्छा समाधान क्यों है? – DVK

0

सबसे अच्छी बात मैं इस मुद्दे पर पाया जाता है:

Accounts.onCreateUser(function(options, user) { 
    // Use provided profile in options, or create an empty object 
    user.profile = options.profile || {}; 

    // Assigns first and last names to the newly created user object 
    user.profile.firstName = options.firstName; 
    user.profile.lastName = options.lastName; 

    // Returns the user object 
    return user;`enter code here` 
}); 

https://medium.com/all-about-meteorjs/extending-meteor-users-300a6cb8e17f

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