Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Apple प्लेटफ़ॉर्म पर Google साइन-इन का उपयोग करके प्रमाणित करें

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

आप अपने ऐप में Google साइन-इन को एकीकृत करके अपने उपयोगकर्ताओं को उनके Google खातों का उपयोग करके Firebase से प्रमाणित करने दे सकते हैं।

शुरू करने से पहले

  1. अपने Apple प्रोजेक्ट में Firebase जोड़ें . अपने Podfile में निम्नलिखित पॉड्स शामिल करें:
    pod 'FirebaseAuth'
    pod 'GoogleSignIn'
    
  2. अगर आपने अभी तक अपने ऐप को अपने Firebase प्रोजेक्ट से कनेक्ट नहीं किया है, तो इसे Firebase कंसोल से करें।
  3. Google को Firebase कंसोल में साइन-इन विधि के रूप में सक्षम करें:
    1. फायरबेस कंसोल में, प्रामाणिक अनुभाग खोलें।
    2. साइन इन विधि टैब पर, Google साइन-इन विधि को सक्षम करें और सहेजें पर क्लिक करें।

1. आवश्यक शीर्षलेख फ़ाइलें आयात करें

सबसे पहले, आपको अपने ऐप में फायरबेस एसडीके और Google साइन-इन एसडीके हेडर फाइलों को आयात करना होगा।

तीव्र

import FirebaseCore
import GoogleSignIn

उद्देश्य सी

@import FirebaseCore;
@import GoogleSignIn;

2. Google साइन-इन लागू करें

इन चरणों का पालन करके Google साइन-इन लागू करें। iOS के साथ Google साइन-इन का उपयोग करने के विवरण के लिए Google साइन-इन डेवलपर दस्तावेज़ देखें।

  1. अपने Xcode प्रोजेक्ट में कस्टम URL स्कीम जोड़ें:
    1. अपना प्रोजेक्ट कॉन्फ़िगरेशन खोलें: बाएँ ट्री व्यू में प्रोजेक्ट नाम पर डबल-क्लिक करें। TARGETS अनुभाग से अपना ऐप चुनें, फिर जानकारी टैब चुनें, और URL प्रकार अनुभाग का विस्तार करें।
    2. + बटन पर क्लिक करें और अपनी उलटी क्लाइंट आईडी के लिए एक यूआरएल स्कीम जोड़ें। इस मान को खोजने के लिए, GoogleService-Info.plist कॉन्फ़िगरेशन फ़ाइल खोलें, और REVERSED_CLIENT_ID कुंजी खोजें। उस कुंजी के मान की प्रतिलिपि बनाएँ, और उसे कॉन्फ़िगरेशन पृष्ठ पर URL योजनाएँ बॉक्स में चिपकाएँ। अन्य क्षेत्रों को खाली छोड़ दें।

      पूरा होने पर, आपकी कॉन्फ़िगरेशन निम्न के जैसा कुछ दिखना चाहिए (लेकिन आपके एप्लिकेशन-विशिष्ट मानों के साथ):

  2. आपके ऐप प्रतिनिधि के application:didFinishLaunchingWithOptions: विधि, FirebaseApp ऑब्जेक्ट को कॉन्फ़िगर करें।

    तीव्र

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    उद्देश्य सी

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  3. application:openURL:options: आपके ऐप प्रतिनिधि की विधि। विधि को handleURL उदाहरण के हैंडलURL विधि को कॉल करना चाहिए, जो प्रमाणीकरण प्रक्रिया के अंत में आपके एप्लिकेशन को प्राप्त होने वाले URL को ठीक से संभाल GIDSignIn

    तीव्र

    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL,
                     options: [UIApplication.OpenURLOptionsKey: Any])
      -> Bool {
      return GIDSignIn.sharedInstance.handle(url)
    }
    

    उद्देश्य सी

    - (BOOL)application:(nonnull UIApplication *)application
                openURL:(nonnull NSURL *)url
                options:(nonnull NSDictionary<NSString *, id> *)options {
      return [[GIDSignIn sharedInstance] handleURL:url];
    }
    
  4. Google साइन इन साइन-इन विधि में अपने ऐप के लिए प्रेजेंटिंग व्यू कंट्रोलर और क्लाइंट आईडी पास करें और परिणामी Google ऑथ टोकन से फ़ायरबेस ऑथ क्रेडेंशियल बनाएं:

    तीव्र

    guard let clientID = FirebaseApp.app()?.options.clientID else { return }
    
    // Create Google Sign In configuration object.
    let config = GIDConfiguration(clientID: clientID)
    
    // Start the sign in flow!
    GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in
    
      if let error = error {
        // ...
        return
      }
    
      guard
        let authentication = user?.authentication,
        let idToken = authentication.idToken
      else {
        return
      }
    
      let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                     accessToken: authentication.accessToken)
    
      // ...
    }
    

    उद्देश्य सी

    GIDConfiguration *config = [[GIDConfiguration alloc] initWithClientID:[FIRApp defaultApp].options.clientID];
    
    __weak __auto_type weakSelf = self;
    [GIDSignIn.sharedInstance signInWithConfiguration:config presentingViewController:self callback:^(GIDGoogleUser * _Nullable user, NSError * _Nullable error) {
      __auto_type strongSelf = weakSelf;
      if (strongSelf == nil) { return; }
    
      if (error == nil) {
        GIDAuthentication *authentication = user.authentication;
        FIRAuthCredential *credential =
        [FIRGoogleAuthProvider credentialWithIDToken:authentication.idToken
                                         accessToken:authentication.accessToken];
        // ...
      } else {
        // ...
      }
    }];
    
    
  5. अपने स्टोरीबोर्ड, XIB फ़ाइल में GIDSignInButton जोड़ें, या इसे प्रोग्रामेटिक रूप से तत्काल करें। अपने स्टोरीबोर्ड या XIB फ़ाइल में बटन जोड़ने के लिए, एक दृश्य जोड़ें और इसके कस्टम वर्ग को GIDSignInButton पर सेट करें।
  6. वैकल्पिक : यदि आप बटन को अनुकूलित करना चाहते हैं, तो निम्न कार्य करें:

    तीव्र

    1. अपने व्यू कंट्रोलर में, साइन-इन बटन को प्रॉपर्टी के रूप में घोषित करें।
      @IBOutlet weak var signInButton: GIDSignInButton!
    2. बटन को signInButton प्रॉपर्टी से कनेक्ट करें जिसे आपने अभी घोषित किया है।
    3. GIDSignInButton ऑब्जेक्ट के गुण सेट करके बटन को अनुकूलित करें।

    उद्देश्य सी

    1. अपने व्यू कंट्रोलर की हेडर फ़ाइल में, साइन-इन बटन को प्रॉपर्टी के रूप में घोषित करें।
      @property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
    2. बटन को signInButton प्रॉपर्टी से कनेक्ट करें जिसे आपने अभी घोषित किया है।
    3. GIDSignInButton ऑब्जेक्ट के गुण सेट करके बटन को अनुकूलित करें।

3. फायरबेस के साथ प्रमाणित करें

अंत में, पिछले चरण में बनाए गए प्रमाणीकरण क्रेडेंशियल के साथ फायरबेस लॉगिन प्रक्रिया को पूरा करें।

तीव्र

Auth.auth().signIn(with: credential) { authResult, error in
    if let error = error {
      let authError = error as NSError
      if isMFAEnabled, authError.code == AuthErrorCode.secondFactorRequired.rawValue {
        // The user is a multi-factor user. Second factor challenge is required.
        let resolver = authError
          .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver
        var displayNameString = ""
        for tmpFactorInfo in resolver.hints {
          displayNameString += tmpFactorInfo.displayName ?? ""
          displayNameString += " "
        }
        self.showTextInputPrompt(
          withMessage: "Select factor to sign in\n\(displayNameString)",
          completionBlock: { userPressedOK, displayName in
            var selectedHint: PhoneMultiFactorInfo?
            for tmpFactorInfo in resolver.hints {
              if displayName == tmpFactorInfo.displayName {
                selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo
              }
            }
            PhoneAuthProvider.provider()
              .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil,
                                 multiFactorSession: resolver
                                   .session) { verificationID, error in
                if error != nil {
                  print(
                    "Multi factor start sign in failed. Error: \(error.debugDescription)"
                  )
                } else {
                  self.showTextInputPrompt(
                    withMessage: "Verification code for \(selectedHint?.displayName ?? "")",
                    completionBlock: { userPressedOK, verificationCode in
                      let credential: PhoneAuthCredential? = PhoneAuthProvider.provider()
                        .credential(withVerificationID: verificationID!,
                                    verificationCode: verificationCode!)
                      let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator
                        .assertion(with: credential!)
                      resolver.resolveSignIn(with: assertion!) { authResult, error in
                        if error != nil {
                          print(
                            "Multi factor finanlize sign in failed. Error: \(error.debugDescription)"
                          )
                        } else {
                          self.navigationController?.popViewController(animated: true)
                        }
                      }
                    }
                  )
                }
              }
          }
        )
      } else {
        self.showMessagePrompt(error.localizedDescription)
        return
      }
      // ...
      return
    }
    // User is signed in
    // ...
}

उद्देश्य सी

[[FIRAuth auth] signInWithCredential:credential
                          completion:^(FIRAuthDataResult * _Nullable authResult,
                                       NSError * _Nullable error) {
    if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) {
      FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey];
      NSMutableString *displayNameString = [NSMutableString string];
      for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
        [displayNameString appendString:tmpFactorInfo.displayName];
        [displayNameString appendString:@" "];
      }
      [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString]
                           completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) {
       FIRPhoneMultiFactorInfo* selectedHint;
       for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
         if ([displayName isEqualToString:tmpFactorInfo.displayName]) {
           selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo;
         }
       }
       [FIRPhoneAuthProvider.provider
        verifyPhoneNumberWithMultiFactorInfo:selectedHint
        UIDelegate:nil
        multiFactorSession:resolver.session
        completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
          if (error) {
            [self showMessagePrompt:error.localizedDescription];
          } else {
            [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName]
                                 completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) {
             FIRPhoneAuthCredential *credential =
                 [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID
                                                              verificationCode:verificationCode];
             FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential];
             [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
               if (error) {
                 [self showMessagePrompt:error.localizedDescription];
               } else {
                 NSLog(@"Multi factor finanlize sign in succeeded.");
               }
             }];
           }];
          }
        }];
     }];
    }
  else if (error) {
    // ...
    return;
  }
  // User successfully signed in. Get user data from the FIRUser object
  if (authResult == nil) { return; }
  FIRUser *user = authResult.user;
  // ...
}];

अगले कदम

उपयोगकर्ता द्वारा पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बनाया जाता है और क्रेडेंशियल से लिंक किया जाता है—अर्थात, उपयोगकर्ता नाम और पासवर्ड, फ़ोन नंबर, या प्रमाणीकरण प्रदाता जानकारी—जिससे उपयोगकर्ता ने साइन इन किया है। यह नया खाता आपके फ़ायरबेस प्रोजेक्ट के हिस्से के रूप में संग्रहीत किया जाता है, और इसका उपयोग आपके प्रोजेक्ट में प्रत्येक ऐप में उपयोगकर्ता की पहचान करने के लिए किया जा सकता है, भले ही उपयोगकर्ता कैसे साइन इन करे।

  • अपने ऐप्स में, आप FIRUser ऑब्जेक्ट से उपयोगकर्ता की मूल प्रोफ़ाइल जानकारी प्राप्त कर सकते हैं। उपयोगकर्ता प्रबंधित करें देखें।

  • अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप auth चर से साइन-इन किए गए उपयोगकर्ता की अद्वितीय उपयोगकर्ता आईडी प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

आप प्रमाणीकरण प्रदाता क्रेडेंशियल्स को मौजूदा उपयोगकर्ता खाते से लिंक करके एकाधिक प्रमाणीकरण प्रदाताओं का उपयोग करके उपयोगकर्ताओं को अपने ऐप में साइन इन करने की अनुमति दे सकते हैं।

किसी उपयोगकर्ता को साइन आउट करने के लिए, signOut: पर कॉल करें।

तीव्र

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

उद्देश्य सी

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

आप प्रमाणीकरण त्रुटियों की पूरी श्रृंखला के लिए त्रुटि प्रबंधन कोड भी जोड़ना चाह सकते हैं। हैंडल एरर देखें।

,

आप अपने ऐप में Google साइन-इन को एकीकृत करके अपने उपयोगकर्ताओं को उनके Google खातों का उपयोग करके Firebase से प्रमाणित करने दे सकते हैं।

शुरू करने से पहले

  1. अपने Apple प्रोजेक्ट में Firebase जोड़ें . अपने Podfile में निम्नलिखित पॉड्स शामिल करें:
    pod 'FirebaseAuth'
    pod 'GoogleSignIn'
    
  2. अगर आपने अभी तक अपने ऐप को अपने Firebase प्रोजेक्ट से कनेक्ट नहीं किया है, तो इसे Firebase कंसोल से करें।
  3. Google को Firebase कंसोल में साइन-इन विधि के रूप में सक्षम करें:
    1. फायरबेस कंसोल में, प्रामाणिक अनुभाग खोलें।
    2. साइन इन विधि टैब पर, Google साइन-इन विधि को सक्षम करें और सहेजें पर क्लिक करें।

1. आवश्यक शीर्षलेख फ़ाइलें आयात करें

सबसे पहले, आपको अपने ऐप में फायरबेस एसडीके और Google साइन-इन एसडीके हेडर फाइलों को आयात करना होगा।

तीव्र

import FirebaseCore
import GoogleSignIn

उद्देश्य सी

@import FirebaseCore;
@import GoogleSignIn;

2. Google साइन-इन लागू करें

इन चरणों का पालन करके Google साइन-इन लागू करें। iOS के साथ Google साइन-इन का उपयोग करने के विवरण के लिए Google साइन-इन डेवलपर दस्तावेज़ देखें।

  1. अपने Xcode प्रोजेक्ट में कस्टम URL स्कीम जोड़ें:
    1. अपना प्रोजेक्ट कॉन्फ़िगरेशन खोलें: बाएँ ट्री व्यू में प्रोजेक्ट नाम पर डबल-क्लिक करें। TARGETS अनुभाग से अपना ऐप चुनें, फिर जानकारी टैब चुनें, और URL प्रकार अनुभाग का विस्तार करें।
    2. + बटन पर क्लिक करें और अपनी उलटी क्लाइंट आईडी के लिए एक यूआरएल स्कीम जोड़ें। इस मान को खोजने के लिए, GoogleService-Info.plist कॉन्फ़िगरेशन फ़ाइल खोलें, और REVERSED_CLIENT_ID कुंजी खोजें। उस कुंजी के मान की प्रतिलिपि बनाएँ, और उसे कॉन्फ़िगरेशन पृष्ठ पर URL योजनाएँ बॉक्स में चिपकाएँ। अन्य क्षेत्रों को खाली छोड़ दें।

      पूरा होने पर, आपकी कॉन्फ़िगरेशन निम्न के जैसा कुछ दिखना चाहिए (लेकिन आपके एप्लिकेशन-विशिष्ट मानों के साथ):

  2. आपके ऐप प्रतिनिधि के application:didFinishLaunchingWithOptions: विधि, FirebaseApp ऑब्जेक्ट को कॉन्फ़िगर करें।

    तीव्र

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    उद्देश्य सी

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  3. application:openURL:options: आपके ऐप प्रतिनिधि की विधि। विधि को handleURL उदाहरण के हैंडलURL विधि को कॉल करना चाहिए, जो प्रमाणीकरण प्रक्रिया के अंत में आपके एप्लिकेशन को प्राप्त होने वाले URL को ठीक से संभाल GIDSignIn

    तीव्र

    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL,
                     options: [UIApplication.OpenURLOptionsKey: Any])
      -> Bool {
      return GIDSignIn.sharedInstance.handle(url)
    }
    

    उद्देश्य सी

    - (BOOL)application:(nonnull UIApplication *)application
                openURL:(nonnull NSURL *)url
                options:(nonnull NSDictionary<NSString *, id> *)options {
      return [[GIDSignIn sharedInstance] handleURL:url];
    }
    
  4. Google साइन इन साइन-इन विधि में अपने ऐप के लिए प्रेजेंटिंग व्यू कंट्रोलर और क्लाइंट आईडी पास करें और परिणामी Google ऑथ टोकन से फ़ायरबेस ऑथ क्रेडेंशियल बनाएं:

    तीव्र

    guard let clientID = FirebaseApp.app()?.options.clientID else { return }
    
    // Create Google Sign In configuration object.
    let config = GIDConfiguration(clientID: clientID)
    
    // Start the sign in flow!
    GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in
    
      if let error = error {
        // ...
        return
      }
    
      guard
        let authentication = user?.authentication,
        let idToken = authentication.idToken
      else {
        return
      }
    
      let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                     accessToken: authentication.accessToken)
    
      // ...
    }
    

    उद्देश्य सी

    GIDConfiguration *config = [[GIDConfiguration alloc] initWithClientID:[FIRApp defaultApp].options.clientID];
    
    __weak __auto_type weakSelf = self;
    [GIDSignIn.sharedInstance signInWithConfiguration:config presentingViewController:self callback:^(GIDGoogleUser * _Nullable user, NSError * _Nullable error) {
      __auto_type strongSelf = weakSelf;
      if (strongSelf == nil) { return; }
    
      if (error == nil) {
        GIDAuthentication *authentication = user.authentication;
        FIRAuthCredential *credential =
        [FIRGoogleAuthProvider credentialWithIDToken:authentication.idToken
                                         accessToken:authentication.accessToken];
        // ...
      } else {
        // ...
      }
    }];
    
    
  5. अपने स्टोरीबोर्ड, XIB फ़ाइल में GIDSignInButton जोड़ें, या इसे प्रोग्रामेटिक रूप से तत्काल करें। अपने स्टोरीबोर्ड या XIB फ़ाइल में बटन जोड़ने के लिए, एक दृश्य जोड़ें और इसके कस्टम वर्ग को GIDSignInButton पर सेट करें।
  6. वैकल्पिक : यदि आप बटन को अनुकूलित करना चाहते हैं, तो निम्न कार्य करें:

    तीव्र

    1. अपने व्यू कंट्रोलर में, साइन-इन बटन को प्रॉपर्टी के रूप में घोषित करें।
      @IBOutlet weak var signInButton: GIDSignInButton!
    2. बटन को signInButton प्रॉपर्टी से कनेक्ट करें जिसे आपने अभी घोषित किया है।
    3. GIDSignInButton ऑब्जेक्ट के गुण सेट करके बटन को अनुकूलित करें।

    उद्देश्य सी

    1. अपने व्यू कंट्रोलर की हेडर फ़ाइल में, साइन-इन बटन को प्रॉपर्टी के रूप में घोषित करें।
      @property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
    2. बटन को signInButton प्रॉपर्टी से कनेक्ट करें जिसे आपने अभी घोषित किया है।
    3. GIDSignInButton ऑब्जेक्ट के गुण सेट करके बटन को अनुकूलित करें।

3. फायरबेस के साथ प्रमाणित करें

अंत में, पिछले चरण में बनाए गए प्रमाणीकरण क्रेडेंशियल के साथ फायरबेस लॉगिन प्रक्रिया को पूरा करें।

तीव्र

Auth.auth().signIn(with: credential) { authResult, error in
    if let error = error {
      let authError = error as NSError
      if isMFAEnabled, authError.code == AuthErrorCode.secondFactorRequired.rawValue {
        // The user is a multi-factor user. Second factor challenge is required.
        let resolver = authError
          .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver
        var displayNameString = ""
        for tmpFactorInfo in resolver.hints {
          displayNameString += tmpFactorInfo.displayName ?? ""
          displayNameString += " "
        }
        self.showTextInputPrompt(
          withMessage: "Select factor to sign in\n\(displayNameString)",
          completionBlock: { userPressedOK, displayName in
            var selectedHint: PhoneMultiFactorInfo?
            for tmpFactorInfo in resolver.hints {
              if displayName == tmpFactorInfo.displayName {
                selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo
              }
            }
            PhoneAuthProvider.provider()
              .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil,
                                 multiFactorSession: resolver
                                   .session) { verificationID, error in
                if error != nil {
                  print(
                    "Multi factor start sign in failed. Error: \(error.debugDescription)"
                  )
                } else {
                  self.showTextInputPrompt(
                    withMessage: "Verification code for \(selectedHint?.displayName ?? "")",
                    completionBlock: { userPressedOK, verificationCode in
                      let credential: PhoneAuthCredential? = PhoneAuthProvider.provider()
                        .credential(withVerificationID: verificationID!,
                                    verificationCode: verificationCode!)
                      let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator
                        .assertion(with: credential!)
                      resolver.resolveSignIn(with: assertion!) { authResult, error in
                        if error != nil {
                          print(
                            "Multi factor finanlize sign in failed. Error: \(error.debugDescription)"
                          )
                        } else {
                          self.navigationController?.popViewController(animated: true)
                        }
                      }
                    }
                  )
                }
              }
          }
        )
      } else {
        self.showMessagePrompt(error.localizedDescription)
        return
      }
      // ...
      return
    }
    // User is signed in
    // ...
}

उद्देश्य सी

[[FIRAuth auth] signInWithCredential:credential
                          completion:^(FIRAuthDataResult * _Nullable authResult,
                                       NSError * _Nullable error) {
    if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) {
      FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey];
      NSMutableString *displayNameString = [NSMutableString string];
      for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
        [displayNameString appendString:tmpFactorInfo.displayName];
        [displayNameString appendString:@" "];
      }
      [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString]
                           completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) {
       FIRPhoneMultiFactorInfo* selectedHint;
       for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
         if ([displayName isEqualToString:tmpFactorInfo.displayName]) {
           selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo;
         }
       }
       [FIRPhoneAuthProvider.provider
        verifyPhoneNumberWithMultiFactorInfo:selectedHint
        UIDelegate:nil
        multiFactorSession:resolver.session
        completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
          if (error) {
            [self showMessagePrompt:error.localizedDescription];
          } else {
            [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName]
                                 completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) {
             FIRPhoneAuthCredential *credential =
                 [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID
                                                              verificationCode:verificationCode];
             FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential];
             [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
               if (error) {
                 [self showMessagePrompt:error.localizedDescription];
               } else {
                 NSLog(@"Multi factor finanlize sign in succeeded.");
               }
             }];
           }];
          }
        }];
     }];
    }
  else if (error) {
    // ...
    return;
  }
  // User successfully signed in. Get user data from the FIRUser object
  if (authResult == nil) { return; }
  FIRUser *user = authResult.user;
  // ...
}];

अगले कदम

उपयोगकर्ता द्वारा पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बनाया जाता है और क्रेडेंशियल से लिंक किया जाता है—अर्थात, उपयोगकर्ता नाम और पासवर्ड, फ़ोन नंबर, या प्रमाणीकरण प्रदाता जानकारी—जिससे उपयोगकर्ता ने साइन इन किया है। यह नया खाता आपके फ़ायरबेस प्रोजेक्ट के हिस्से के रूप में संग्रहीत किया जाता है, और इसका उपयोग आपके प्रोजेक्ट में प्रत्येक ऐप में उपयोगकर्ता की पहचान करने के लिए किया जा सकता है, भले ही उपयोगकर्ता कैसे साइन इन करे।

  • अपने ऐप्स में, आप FIRUser ऑब्जेक्ट से उपयोगकर्ता की मूल प्रोफ़ाइल जानकारी प्राप्त कर सकते हैं। उपयोगकर्ता प्रबंधित करें देखें।

  • अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप auth चर से साइन-इन किए गए उपयोगकर्ता की अद्वितीय उपयोगकर्ता आईडी प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

आप प्रमाणीकरण प्रदाता क्रेडेंशियल्स को मौजूदा उपयोगकर्ता खाते से लिंक करके एकाधिक प्रमाणीकरण प्रदाताओं का उपयोग करके उपयोगकर्ताओं को अपने ऐप में साइन इन करने की अनुमति दे सकते हैं।

किसी उपयोगकर्ता को साइन आउट करने के लिए, signOut: पर कॉल करें।

तीव्र

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

उद्देश्य सी

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

आप प्रमाणीकरण त्रुटियों की पूरी श्रृंखला के लिए त्रुटि प्रबंधन कोड भी जोड़ना चाह सकते हैं। हैंडल एरर देखें।