फ़ेडरेटेड आइडेंटिटी और सोशल साइन-इन

सोशल ऑथेंटिकेशन, पुष्टि करने की एक ऐसी प्रोसेस है जिसमें कई चरण शामिल होते हैं. इसकी मदद से, किसी उपयोगकर्ता को किसी खाते में साइन इन कराया जा सकता है या उसे किसी मौजूदा खाते से लिंक किया जा सकता है.

नेटिव प्लैटफ़ॉर्म और वेब, दोनों पर क्रेडेंशियल बनाया जा सकता है. इसके बाद, इसे signInWithCredential या linkWithCredential तरीकों से पास किया जा सकता है. इसके अलावा, वेब प्लैटफ़ॉर्म पर, पॉप-अप या रीडायरेक्ट के ज़रिए पुष्टि करने की प्रोसेस शुरू की जा सकती है.

Google

Firebase के साथ Google Sign-In का इस्तेमाल करते समय, ज़्यादातर कॉन्फ़िगरेशन पहले से ही सेट अप होता है. हालांकि, आपको यह पक्का करना होगा कि आपकी मशीन के SHA1 कुंजी को Android के साथ इस्तेमाल करने के लिए कॉन्फ़िगर किया गया हो. पुष्टि करने से जुड़े दस्तावेज़ में, कुंजी जनरेट करने का तरीका देखा जा सकता है.

पक्का करें कि Firebase कंसोल पर, "Google" साइन-इन सेवा देने वाली कंपनी चालू हो.

अगर कोई उपयोगकर्ता, पहले से ही मैन्युअल तरीके से खाता रजिस्टर कर चुका है और फिर Google से साइन इन करता है, तो पुष्टि करने वाली उसकी सेवा अपने-आप Google पर सेट हो जाएगी. ऐसा इसलिए होगा, क्योंकि Firebase Authentication में भरोसेमंद सेवा देने वाली कंपनियों का कॉन्सेप्ट होता है. इस बारे में ज़्यादा जानने के लिए, यहां जाएं.

iOS+ और Android

नेटिव प्लैटफ़ॉर्म पर, पुष्टि करने की प्रोसेस को ट्रिगर करने के लिए, तीसरे पक्ष की लाइब्रेरी की ज़रूरत होती है.

google_sign_in का आधिकारिक प्लगिन इंस्टॉल करें.

इंस्टॉल होने के बाद, साइन-इन फ़्लो ट्रिगर करें और नया क्रेडेंशियल बनाएं:

import 'package:google_sign_in/google_sign_in.dart';

Future<UserCredential> signInWithGoogle() async {
  // Trigger the authentication flow
  final GoogleSignInAccount? googleUser = await GoogleSignIn.instance.authenticate();

  // Obtain the auth details from the request
  final GoogleSignInAuthentication googleAuth = googleUser.authentication;

  // Create a new credential
  final credential = GoogleAuthProvider.credential(idToken: googleAuth.idToken);

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithCredential(credential);
}

वेब

वेब पर, Firebase SDK टूल आपके Firebase प्रोजेक्ट का इस्तेमाल करके, पुष्टि करने की प्रोसेस को अपने-आप मैनेज करने की सुविधा देता है. उदाहरण के लिए:

Google की पुष्टि करने वाली सेवा देने वाली कंपनी बनाएं. साथ ही, उपयोगकर्ता से आपको जो भी अतिरिक्त अनुमति का दायरा चाहिए उसे उपलब्ध कराएं:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
  'login_hint': 'user@example.com'
});

signInWithPopup तरीके के लिए क्रेडेंशियल दें. इससे एक नई विंडो खुलेगी. इसमें उपयोगकर्ता को अपने प्रोजेक्ट में साइन इन करने के लिए कहा जाएगा. इसके अलावा, signInWithRedirect का इस्तेमाल करके, पुष्टि करने की प्रोसेस को उसी विंडो में जारी रखा जा सकता है.

Future<UserCredential> signInWithGoogle() async {
  // Create a new provider
  GoogleAuthProvider googleProvider = GoogleAuthProvider();

  googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
  googleProvider.setCustomParameters({
    'login_hint': 'user@example.com'
  });

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(googleProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(googleProvider);
}

Google Play Games (सिर्फ़ Android पर)

पक्का करें कि Firebase कंसोल पर, "Play Games" साइन-इन सेवा देने वाली कंपनी चालू हो. Play Games Firebase प्रोजेक्ट सेट-अप के लिए, इन निर्देशों का पालन करें.

अपने Firebase ऐप्लिकेशन के साथ Play Games सेवाओं को कॉन्फ़िगर करने के लिए, इन निर्देशों का पालन करें.

Android

Future<void> _signInWithPlayGames() async {
  // Get server auth code from 3rd party provider
  // See PR description for details on how you might get the server auth code:
  // https://github.com/firebase/flutterfire/pull/12201#issue-2100392487
  final serverAuthCode = '...';
  final playGamesCredential = PlayGamesAuthProvider.credential(
                                          serverAuthCode: serverAuthCode);

  await FirebaseAuth.instance
    .signInWithCredential(playGamesCredential);
}

Facebook

शुरू करने से पहले, Facebook Developer ऐप्लिकेशन सेट अप करें. साथ ही, Facebook Login की सुविधा चालू करने के लिए, सेट अप करने की प्रोसेस पूरी करें.

पक्का करें कि Firebase Console पर, "Facebook" साइन-इन प्रोवाइडर चालू हो. साथ ही, Facebook ऐप्लिकेशन आईडी और सीक्रेट सेट किया गया हो.

iOS+ और Android

नेटिव प्लैटफ़ॉर्म पर, Facebook SDK टूल को इंस्टॉल करने और पुष्टि करने की प्रोसेस को ट्रिगर करने के लिए, तीसरे पक्ष की लाइब्रेरी की ज़रूरत होती है.

flutter_facebook_auth प्लगिन इंस्टॉल करें.

आपको प्लगिन के दस्तावेज़ में दिया गया तरीका अपनाना होगा. इससे यह पक्का किया जा सकेगा कि Android और iOS, दोनों के लिए Facebook SDK टूल सही तरीके से शुरू किए गए हों. यह प्रोसेस पूरी होने के बाद, साइन-इन फ़्लो ट्रिगर करें, Facebook क्रेडेंशियल बनाएं, और उपयोगकर्ता को साइन इन करें:

import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';

Future<UserCredential> signInWithFacebook() async {
  // Trigger the sign-in flow
  final LoginResult loginResult = await FacebookAuth.instance.login();

  // Create a credential from the access token
  final OAuthCredential facebookAuthCredential = FacebookAuthProvider.credential(loginResult.accessToken.token);

  // Once signed in, return the UserCredential
  return FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);
}

वेब

वेब पर, Firebase SDK टूल, Firebase कंसोल पर दी गई Facebook ऐप्लिकेशन की जानकारी का इस्तेमाल करके, पुष्टि करने की प्रोसेस को अपने-आप मैनेज करने की सुविधा देता है. उदाहरण के लिए:

Facebook provider बनाएं. साथ ही, उपयोगकर्ता से हासिल की जाने वाली कोई भी अतिरिक्त अनुमति का दायरा दें.

पक्का करें कि Firebase कंसोल से OAuth रीडायरेक्ट यूआरआई को, Facebook ऐप्लिकेशन में मान्य OAuth रीडायरेक्ट यूआरआई के तौर पर जोड़ा गया हो.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
  'display': 'popup',
});

signInWithPopup तरीके के लिए क्रेडेंशियल दें. इससे एक नई विंडो खुलेगी. इसमें उपयोगकर्ता को आपके Facebook ऐप्लिकेशन में साइन-इन करने के लिए कहा जाएगा:

Future<UserCredential> signInWithFacebook() async {
  // Create a new provider
  FacebookAuthProvider facebookProvider = FacebookAuthProvider();

  facebookProvider.addScope('email');
  facebookProvider.setCustomParameters({
    'display': 'popup',
  });

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(facebookProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(facebookProvider);
}

Apple

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithApple() async {
  final appleProvider = AppleAuthProvider();
  if (kIsWeb) {
    await FirebaseAuth.instance.signInWithPopup(appleProvider);
  } else {
    await FirebaseAuth.instance.signInWithProvider(appleProvider);
  }
}

सिर्फ़ Apple प्लैटफ़ॉर्म पर साइन इन करने की सुविधा

iOS+ प्लैटफ़ॉर्म पर Apple से साइन इन करने के लिए, यह तरीका भी इस्तेमाल किया जा सकता है:

// Implement a function that generates a nonce. See iOS documentation for how to create a nonce:
// https://firebase.google.com/docs/auth/ios/apple#sign_in_with_apple_and_authenticate_with_firebase
String rawNonce = createNonce();
// Create a SHA-256 hash of the nonce. Consider using the `crypto` package from the pub.dev registry.
String hashSHA256String = createHashSHA256String(rawNonce);
// Use the hash of the nonce to get the idToken. Consider using the `sign_in_with_apple` plugin from the pub.dev registry.
String idToken = await getIdToken();

final fullName = AppleFullPersonName(
  familyName: 'Name',
  givenName: 'Your',
);
// Use the `rawNonce` and `idToken` to get the credential
final credential = AppleAuthProvider.credentialWithIDToken(
  idToken,
  rawNonce,
  fullName,
);

await FirebaseAuth.instance.signInWithCredential(credential);

Apple के पुष्टि करने वाले टोकन रद्द करना

Apple प्लैटफ़ॉर्म पर Apple से साइन इन करने पर, एक ऑथराइज़ेशन कोड मिलता है. इसका इस्तेमाल revokeTokenWithAuthorizationCode() एपीआई की मदद से, Apple के ऑथराइज़ेशन टोकन को रद्द करने के लिए किया जा सकता है.

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithApple() async {
  final appleProvider = AppleAuthProvider();

  UserCredential userCredential = await FirebaseAuth.instance.signInWithPopup(appleProvider);
  // Keep the authorization code returned from Apple platforms
  String? authCode = userCredential.additionalUserInfo?.authorizationCode;
  // Revoke Apple auth token
  await FirebaseAuth.instance.revokeTokenWithAuthorizationCode(authCode!);
}

Apple Game Center (सिर्फ़ Apple के लिए)

पक्का करें कि Firebase कंसोल पर, "Game Center" साइन-इन सेवा देने वाली कंपनी चालू हो. Game Center Firebase प्रोजेक्ट सेट-अप के लिए, इन निर्देशों का पालन करें.

Firebase के ज़रिए Game Center के क्रेडेंशियल जारी करने और उनमें लॉग इन करने से पहले, आपको Game Center में लॉग इन करना होगा. यहां कुछ निर्देश दिए गए हैं जिनकी मदद से ऐसा किया जा सकता है.

iOS+

Future<void> _signInWithGameCenter() async {
  final credential = GameCenterAuthProvider.credential();
  await FirebaseAuth.instance
      .signInWithCredential(credential);
}

Microsoft

iOS+

iOS के लिए Microsoft Login को कॉन्फ़िगर करने से पहले, अपने रनर (पहला चरण) में कस्टम यूआरएल स्कीम जोड़ें.

Android

शुरू करने से पहले, Android के लिए Microsoft Login कॉन्फ़िगर करें.

अपने ऐप्लिकेशन का SHA-1 फ़िंगरप्रिंट जोड़ना न भूलें.

वेब

शुरू करने से पहले, वेब के लिए Microsoft Login को कॉन्फ़िगर करें.

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithMicrosoft() async {
  final microsoftProvider = MicrosoftAuthProvider();
  if (kIsWeb) {
    await FirebaseAuth.instance.signInWithPopup(microsoftProvider);
  } else {
    await FirebaseAuth.instance.signInWithProvider(microsoftProvider);
  }
}

Twitter

पक्का करें कि Firebase Console पर, "Twitter" साइन-इन सेवा देने वाली कंपनी चालू हो. साथ ही, एपीआई पासकोड और एपीआई सीक्रेट सेट हो. पक्का करें कि Firebase OAuth रीडायरेक्ट यूआरआई (जैसे, my-app-12345.firebaseapp.com/__/auth/handler) को Twitter ऐप्लिकेशन के कॉन्फ़िगरेशन में, आपके ऐप्लिकेशन की सेटिंग वाले पेज पर, अनुमति देने के लिए कॉलबैक यूआरएल के तौर पर सेट किया गया हो.

आपको अपने ऐप्लिकेशन के हिसाब से, एपीआई के बेहतर ऐक्सेस का अनुरोध भी करना पड़ सकता है.

iOS+

आपको अपनी कस्टम यूआरएल स्कीम को कॉन्फ़िगर करना होगा. इसके लिए, iOS गाइड के पहले चरण में दिए गए निर्देशों का पालन करें.

Android

अगर आपने अब तक अपने ऐप्लिकेशन का SHA-1 फ़िंगरप्रिंट नहीं दिया है, तो Firebase कंसोल के सेटिंग पेज पर जाकर ऐसा करें. अपने ऐप्लिकेशन के SHA-1 फ़िंगरप्रिंट को पाने के तरीके के बारे में जानने के लिए, अपने क्लाइंट की पुष्टि करना लेख पढ़ें.

वेब

पहले से मौजूद सुविधा.

import 'package:firebase_auth/firebase_auth.dart';

Future<void> _signInWithTwitter() async {
  TwitterAuthProvider twitterProvider = TwitterAuthProvider();

  if (kIsWeb) {
    await FirebaseAuth.instance.signInWithPopup(twitterProvider);
  } else {
    await FirebaseAuth.instance.signInWithProvider(twitterProvider);
  }
}

GitHub

पक्का करें कि आपने GitHub डेवलपर सेटिंग से OAuth ऐप्लिकेशन सेट अप किया हो. साथ ही, यह भी पक्का करें कि Firebase कंसोल पर "GitHub" साइन-इन प्रोवाइडर चालू हो. साथ ही, क्लाइंट आईडी और सीक्रेट सेट किए गए हों. इसके अलावा, GitHub ऐप्लिकेशन में कॉलबैक यूआरएल सेट किया गया हो.

iOS+ और Android

नेटिव प्लैटफ़ॉर्म के लिए, आपको google-services.json और GoogleService-Info.plist को जोड़ना होगा.

iOS के लिए, कस्टम यूआरएल स्कीम को iOS गाइड में बताए गए पहले चरण के तौर पर जोड़ें.

Future<UserCredential> signInWithGitHub() async {
  // Create a new provider
  GithubAuthProvider githubProvider = GithubAuthProvider();

  return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}

वेब

वेब पर, GitHub SDK टूल, पुष्टि करने की प्रोसेस को अपने-आप मैनेज करने की सुविधा देता है. इसके लिए, Firebase कंसोल पर दी गई GitHub ऐप्लिकेशन की जानकारी का इस्तेमाल किया जाता है. पक्का करें कि Firebase कंसोल में मौजूद कॉलबैक यूआरएल को, डेवलपर कंसोल पर GitHub ऐप्लिकेशन में कॉलबैक यूआरएल के तौर पर जोड़ा गया हो.

उदाहरण के लिए:

GitHub प्रोवाइडर बनाएं और signInWithPopup तरीके को क्रेडेंशियल दें. इससे एक नई विंडो खुलेगी. इसमें उपयोगकर्ता को GitHub ऐप्लिकेशन में साइन-इन करने के लिए कहा जाएगा:

Future<UserCredential> signInWithGitHub() async {
  // Create a new provider
  GithubAuthProvider githubProvider = GithubAuthProvider();

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(githubProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(githubProvider);
}

Yahoo

पक्का करें कि Firebase कंसोल पर, "Yahoo" साइन-इन सेवा देने वाली कंपनी चालू हो. साथ ही, एपीआई पासकोड और एपीआई सीक्रेट सेट हो. यह भी पक्का करें कि आपका Firebase OAuth रीडायरेक्ट यूआरआई (जैसे, my-app-12345.firebaseapp.com/__/auth/handler), आपके ऐप्लिकेशन के Yahoo Developer Network कॉन्फ़िगरेशन में रीडायरेक्ट यूआरआई के तौर पर सेट हो.

iOS+

शुरू करने से पहले, iOS के लिए Yahoo Login कॉन्फ़िगर करें और अपने रनर (पहला चरण) में कस्टम यूआरएल स्कीम जोड़ें.

Android

शुरू करने से पहले, Android के लिए Yahoo Login कॉन्फ़िगर करें.

अपने ऐप्लिकेशन का SHA-1 फ़िंगरप्रिंट जोड़ना न भूलें.

वेब

पहले से मौजूद सुविधा.

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithYahoo() async {
  final yahooProvider = YahooAuthProvider();
  if (kIsWeb) {
    await _auth.signInWithPopup(yahooProvider);
  } else {
    await _auth.signInWithProvider(yahooProvider);
  }
}

OAuth ऐक्सेस टोकन का इस्तेमाल करना

AuthProvider का इस्तेमाल करके, प्रोवाइडर से जुड़े ऐक्सेस टोकन को वापस पाया जा सकता है. इसके लिए, यह अनुरोध करें.

final appleProvider = AppleAuthProvider();

final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;

// You can send requests with the `accessToken`

पुष्टि करने वाली सेवा देने वाली कंपनी को लिंक करना

अगर आपको किसी मौजूदा उपयोगकर्ता से कोई प्रोवाइडर लिंक करना है, तो यह तरीका अपनाएं:

await FirebaseAuth.instance.signInAnonymously();

final appleProvider = AppleAuthProvider();

if (kIsWeb) {
  await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);

  // You can also use `linkWithRedirect`
} else {
  await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider);
}

// You're anonymous user is now upgraded to be able to connect with Sign In With Apple

सेवा देने वाली कंपनी से फिर से पुष्टि करें

इसी पैटर्न का इस्तेमाल reauthenticateWithProvider के साथ किया जा सकता है. इसका इस्तेमाल, संवेदनशील कार्रवाइयों के लिए नए क्रेडेंशियल वापस पाने के लिए किया जा सकता है. इन कार्रवाइयों के लिए, हाल ही में लॉगिन करना ज़रूरी होता है.

final appleProvider = AppleAuthProvider();

if (kIsWeb) {
  await FirebaseAuth.instance.currentUser?.reauthenticateWithPopup(appleProvider);

  // Or you can reauthenticate with a redirection
  // await FirebaseAuth.instance.currentUser?.reauthenticateWithRedirect(appleProvider);
} else {
  await FirebaseAuth.instance.currentUser?.reauthenticateWithProvider(appleProvider);
}

// You can now perform sensitive operations