2016-09-02 13 views
10

मैं प्रमाणन प्रदाता का पता लगाने और लॉग आउट ठीक सेFirebase प्रमाणीकरण - प्रदाता आईडी

static func logOut() { 
    let auth = FIRAuth.auth()! 
    let provider = auth.currentUser?.providerID 
    switch provider! { 
     case "Facebook": FBSDKLoginManager().logOut() 
     case "Google": GIDSignIn.sharedInstance().signOut() 
     case "Twitter": Twitter.sharedInstance().sessionStore.logOutUserID(TWTRAPIClient.withCurrentUser().userID!) 
     default: 
      print("Unknown provider ID: \(provider!)") 
      return 
    } 
    try! auth.signOut() 
} 

के लिए निम्न कोड का उपयोग कर रहा हूँ, लेकिन प्रदाता हमेशा "Firebase" है मिलता है। मैं क्या गलत कर रहा हूं? 0_o जब एक बार ट्विटर में लॉग इन किया गया था तो कोड "फेसबुक" फेंक देता है। अग्रिम धन्यवाद

यूपीडी: हाँ, मैं वास्तव में UserDefaults में ऑथ प्रदाता स्टोर कर सकता हूं, लेकिन शायद यह फ़ायरबेस बग है। मैं फायरबेस एसडीके 3.5.2

+0

नहीं 'FIRAuth.auth() !. प्रस्थान करें()' बाहर काम किया:

भी UID, जो एक ऐसी ही स्थिति में हैं के बारे में इस सवाल देखते हैं? – KhanXc

+0

@ खानक्सक काम करता है, लेकिन मैंने सोचा कि यह पर्याप्त नहीं है। एंड्रॉइड में यह मामला सामने आएगा, जहां आप अलग-अलग Google खाता –

+0

चुनते हैं लेकिन मुझे प्रदाता क्यों नहीं मिल सकता है? अगर मुझे किसी भी मामले में इसकी आवश्यकता होगी। यह एक बग है, या मैं कुछ गलत कर रहा हूँ –

उत्तर

19

चूंकि उपयोगकर्ता एकाधिक प्रदाताओं के साथ अपने फायरबेस प्रमाणीकरण खाते में साइन इन कर सकता है, इसलिए शीर्ष-स्तरीय प्रदाता आईडी अब (आमतौर पर) Firebase होगी।

लेकिन currentUser has a providerData property जो विशिष्ट प्रदाताओं पर जानकारी प्रदान करता है। FIRAuth.auth()!.currentUser.providerData पर लूपिंग आपको FIRUserInfo.providerID देगा जो आप ढूंढ रहे हैं। Firebase returns multiple IDs, Which is unique one?

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