2017-04-04 15 views
5

मैं उपयोगकर्ता कस्टम गुण सेट करने का प्रयास किया गया है या auth.updateProfile पद्धति का उपयोग करके जिम्मेदार बताते हैं लेकिन यह केवल displayName संपत्ति क्योंकि यह अपनी docs में उल्लेख किया गया है को बचाने:Angular2 Firebase सेट उपयोगकर्ता कस्टम Propertise

this.af.auth.createUser({ 
    email: formData.value.email, 
    password: formData.value.password, 
}).then((user) => { 
    let userProfile = formData.value; 
    userProfile.role = AuthService.ROLE_PATIENT; 
    userProfile.displayName = `${formData.value.firstName} ${formData.value.lastName}`; 
    user.auth.updateProfile(userProfile).then(function(){ 
    this.router.navigate(['/']); 
}); 

अब समस्या मैं कैसे निर्धारित कर सकते हैं उपयोगकर्ता के कस्टम गुण ताकि मैं उन्हें FirebaseAuthState

प्रश्न: मुझे प्रत्येक उपयोगकर्ता के साथ कस्टम गुणों को सहेजने की आवश्यकता क्यों है?

उत्तर: क्योंकि मैं Auth Guard साथ काम कर रहा हूँ role संपत्ति जो डेटाबेस उदाहरण में सहेजा जाता है का उपयोग कर एक विशेष मार्ग को सक्रिय करने के:

canActivate(route: ActivatedRouteSnapshot, 
       state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { 
    //Currently I'm using this which only check that user is logged in or not 
    return this.auth 
     .take(1) 
     .map((authState: FirebaseAuthState) => !!authState) 
     .do(authenticated => { 
     if (!authenticated) this.router.navigate(['/login']); 
     }); 
    } 

लेकिन मैं एक और जांच चाहते उपयोगकर्ता को मान्य करने की भूमिका है रोगी जिसे मैंने ऊपर उपयोगकर्ता बनाते समय सहेजा है उदाहरण: return user.role == 'patient'

+0

फायरबेस कंसोल और Google क्लाउड कंसोल समान अंतर्निहित भूमिकाओं और अनुमतियों का उपयोग करता है। उच्च स्तर पर, ये मालिक, संपादक और दर्शक हैं। –

+0

जो मेरी समस्या का समाधान नहीं करेगा, क्या आपके पास विशिष्ट विशिष्ट भूमिका के लिए उचित समाधान या सिद्धांत हो सकता है? –

+0

क्या आप उन्हें बस में जोड़ नहीं सकते? – Chrillewoodz

उत्तर

1

फायरबेस प्रमाणीकरण में मौजूदा पहचान प्रदाताओं के पास कस्टम गुण जोड़ने का कोई तरीका नहीं है। यदि आप कस्टम गुण जोड़ना चाहते हैं, तो आपको या तो कस्टम पहचान प्रदाता को लागू करना होगा (minting custom tokens in a trusted process और signing in with a custom token देखें) या client-side look-up of the additional information from an alternate data source (जैसे फ़ायरबेस डेटाबेस) करें।

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { 
    //Currently I'm using this which only check that user is logged in or not 
    return this.auth 
     .take(1) 
     .map((authState: FirebaseAuthState) => { 

     return this.af.database.list('/path/to/account').first().map((account: IAccount) => { 

      if (authState && account.role === 'patient') { 
      return true; 
      } 
      else { 
      return this.router.navigate(['/login']); 
      } 
     }); 
     }); 
    } 

यह काफी दूर तक से प्राप्त किए गए, लेकिन यह सिर्फ काम कर सकते हैं:

0

शायद आप कुछ इस तरह कर सकते हैं। या उत्तर खोजने के रास्ते में आपकी सहायता करें।