फ़ेडरेटेड पहचान और सामाजिक साइन-इन

सामाजिक प्रमाणीकरण एक बहु-चरणीय प्रमाणीकरण प्रवाह है, जिससे आप किसी उपयोगकर्ता को किसी खाते में साइन इन कर सकते हैं या उन्हें किसी मौजूदा खाते से लिंक कर सकते हैं।

दोनों नेटिव प्लेटफॉर्म और वेब सपोर्ट एक क्रेडेंशियल बनाते हैं जिसे तब signInWithCredential या linkWithCredential विधियों को पास किया जा सकता है। वैकल्पिक रूप से वेब प्लेटफॉर्म पर, आप पॉपअप या रीडायरेक्ट के माध्यम से प्रमाणीकरण प्रक्रिया को ट्रिगर कर सकते हैं।

गूगल

फायरबेस के साथ Google साइन-इन का उपयोग करते समय अधिकांश कॉन्फ़िगरेशन पहले से ही सेटअप है, हालांकि आपको यह सुनिश्चित करने की आवश्यकता है कि आपकी मशीन की SHA1 कुंजी Android के साथ उपयोग के लिए कॉन्फ़िगर की गई है। आप देख सकते हैं कि इंस्टालेशन प्रलेखन पर कुंजी कैसे उत्पन्न की जाती है।

सुनिश्चित करें कि "Google" साइन-इन प्रदाता फायरबेस कंसोल पर सक्षम है।

यदि आपका उपयोगकर्ता Google के साथ साइन इन करता है, तो पहले से ही मैन्युअल रूप से एक खाता पंजीकृत करने के बाद, विश्वसनीय प्रदाताओं की फायरबेस प्रमाणीकरण अवधारणा के कारण, उनका प्रमाणीकरण प्रदाता स्वचालित रूप से Google में बदल जाएगा। आप इसके बारे में यहां और जान सकते हैं।

आईओएस+ और एंड्रॉइड

मूल प्लेटफ़ॉर्म पर, प्रमाणीकरण प्रवाह को ट्रिगर करने के लिए किसी तृतीय पक्ष लाइब्रेरी की आवश्यकता होती है।

आधिकारिक 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().signIn();

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

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

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

वेब

वेब पर, फायरबेस एसडीके आपके फायरबेस प्रोजेक्ट का उपयोग करके प्रमाणीकरण प्रवाह को स्वचालित रूप से संभालने के लिए सहायता प्रदान करता है। उदाहरण के लिए:

उपयोगकर्ता से आप जो भी अतिरिक्त अनुमति प्राप्त करना चाहते हैं, उसे प्रदान करते हुए एक 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);
}

फेसबुक

आरंभ करने से पहले अपना फेसबुक डेवलपर ऐप सेटअप करें और फेसबुक लॉगिन को सक्षम करने के लिए सेटअप प्रक्रिया का पालन करें।

सुनिश्चित करें कि "Facebook" साइन-इन प्रदाता Firebase कंसोल पर सक्षम है। फेसबुक ऐप आईडी और सीक्रेट सेट के साथ।

आईओएस+ और एंड्रॉइड

नेटिव प्लैटफ़ॉर्म पर, Facebook SDK इंस्टॉल करने और प्रमाणीकरण प्रवाह को ट्रिगर करने, दोनों के लिए तृतीय पक्ष लाइब्रेरी की आवश्यकता होती है.

flutter_facebook_auth प्लगइन स्थापित करें।

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

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 कंसोल से OAuth रीडायरेक्ट URI को आपके Facebook ऐप में मान्य OAuth रीडायरेक्ट URI के रूप में जोड़ा गया है।

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

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

signInWithPopup विधि को क्रेडेंशियल प्रदान करें। यह उपयोगकर्ता को आपके फेसबुक एप्लिकेशन में साइन-इन करने के लिए प्रेरित करने के लिए एक नई विंडो को ट्रिगर करेगा:

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);
}

सेब

आईओएस+ और एंड्रॉइड

इससे पहले कि आप ऐप्पल के साथ साइन इन को कॉन्फ़िगर करना शुरू करें और ऐप्पल को साइन-इन प्रदाता के रूप में सक्षम करें

इसके बाद, सुनिश्चित करें कि आपके Runner ऐप्स में "Apple के साथ साइन इन करें" क्षमता है।

sign_in_with_apple प्लगइन, साथ ही crypto पैकेज स्थापित करें:

dependencies:
  sign_in_with_apple: ^3.0.0
  crypto: ^3.0.1
import 'dart:convert';
import 'dart:math';

import 'package:crypto/crypto.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:sign_in_with_apple/sign_in_with_apple.dart';

/// Generates a cryptographically secure random nonce, to be included in a
/// credential request.
String generateNonce([int length = 32]) {
  const charset =
      '0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._';
  final random = Random.secure();
  return List.generate(length, (_) => charset[random.nextInt(charset.length)])
      .join();
}

/// Returns the sha256 hash of [input] in hex notation.
String sha256ofString(String input) {
  final bytes = utf8.encode(input);
  final digest = sha256.convert(bytes);
  return digest.toString();
}

Future<UserCredential> signInWithApple() async {
  // To prevent replay attacks with the credential returned from Apple, we
  // include a nonce in the credential request. When signing in with
  // Firebase, the nonce in the id token returned by Apple, is expected to
  // match the sha256 hash of `rawNonce`.
  final rawNonce = generateNonce();
  final nonce = sha256ofString(rawNonce);

  // Request credential for the currently signed in Apple account.
  final appleCredential = await SignInWithApple.getAppleIDCredential(
    scopes: [
      AppleIDAuthorizationScopes.email,
      AppleIDAuthorizationScopes.fullName,
    ],
    nonce: nonce,
  );

  // Create an `OAuthCredential` from the credential returned by Apple.
  final oauthCredential = OAuthProvider("apple.com").credential(
    idToken: appleCredential.identityToken,
    rawNonce: rawNonce,
  );

  // Sign in the user with Firebase. If the nonce we generated earlier does
  // not match the nonce in `appleCredential.identityToken`, sign in will fail.
  return await FirebaseAuth.instance.signInWithCredential(oauthCredential);
}

वेब

इससे पहले कि आप ऐप्पल के साथ साइन इन को कॉन्फ़िगर करना शुरू करें और ऐप्पल को साइन-इन प्रदाता के रूप में सक्षम करें

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithApple() async {
  // Create and configure an OAuthProvider for Sign In with Apple.
  final provider = OAuthProvider("apple.com")
    ..addScope('email')
    ..addScope('name');

  // Sign in the user with Firebase.
  return await FirebaseAuth.instance.signInWithPopup(provider);
}

signInWithRedirect का उपयोग करने का एक विकल्प है। उस स्थिति में ब्राउज़र आपके ऐप से दूर चला जाएगा और ऐप स्टार्टअप के दौरान प्रमाणीकरण परिणामों की जांच के लिए आपको getRedirectResult का उपयोग करना होगा।

ट्विटर

सुनिश्चित करें कि "ट्विटर" साइन-इन प्रदाता एक एपीआई कुंजी और एपीआई गुप्त सेट के साथ फायरबेस कंसोल पर सक्षम है।

आईओएस+ और एंड्रॉइड

स्थानीय प्लेटफ़ॉर्म पर, Twitter SDK को स्थापित करने और प्रमाणीकरण प्रवाह को ट्रिगर करने, दोनों के लिए एक तृतीय पक्ष लाइब्रेरी की आवश्यकता होती है।

twitter_login प्लगइन स्थापित करें:

dependencies:
  twitter_login: ^4.0.1

twitter_login के कॉन्फ़िगरेशन चरणों को ध्यान से पढ़ना सुनिश्चित करें और मेल खाने वाली URL योजना के साथ Twitter डेवलपर पोर्टल पर कॉलबैक URL पंजीकृत करें

import 'package:twitter_login/twitter_login.dart';

Future<UserCredential> signInWithTwitter() async {
  // Create a TwitterLogin instance
  final twitterLogin = new TwitterLogin(
    apiKey: '<your consumer key>',
    apiSecretKey:' <your consumer secret>',
    redirectURI: '<your_scheme>://'
  );

  // Trigger the sign-in flow
  final authResult = await twitterLogin.login();

  // Create a credential from the access token
  final twitterAuthCredential = TwitterAuthProvider.credential(
    accessToken: authResult.authToken!,
    secret: authResult.authTokenSecret!,
  );

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

वेब

वेब पर, Twitter SDK, Firebase कंसोल पर दिए गए Twitter एप्लिकेशन विवरण का उपयोग करके प्रमाणीकरण प्रवाह को स्वचालित रूप से प्रबंधित करने के लिए सहायता प्रदान करता है। सुनिश्चित करें कि Firebase कंसोल में कॉलबैक URL आपके Twitter एप्लिकेशन में उनके डेवलपर कंसोल पर कॉलबैक URL के रूप में जोड़ा गया है।

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

एक ट्विटर प्रदाता बनाएं और signInWithPopup विधि को क्रेडेंशियल प्रदान करें। यह उपयोगकर्ता को आपके ट्विटर एप्लिकेशन में साइन-इन करने के लिए प्रेरित करने के लिए एक नई विंडो को ट्रिगर करेगा:

Future<UserCredential> signInWithTwitter() async {
  // Create a new provider
  TwitterAuthProvider twitterProvider = TwitterAuthProvider();

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

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

GitHub

सुनिश्चित करें कि आपने अपनी गिटहब डेवलपर सेटिंग्स से एक ओएथ ऐप सेट किया है और "गिटहब" साइन-इन प्रदाता क्लाइंट आईडी के साथ फायरबेस कंसोल पर सक्षम है और सीक्रेट सेट हैं, जिसमें गिटहब ऐप में कॉलबैक यूआरएल सेट है।

आईओएस+ और एंड्रॉइड

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

iOS के लिए, iOS गाइड चरण 1 में बताए अनुसार कस्टम URL स्कीम जोड़ें।

import 'package:github_sign_in/github_sign_in.dart';

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

  return await _auth.signInWithAuthProvider(githubProvider);
}

वेब

वेब पर, गिटहब एसडीके फायरबेस कंसोल पर प्रदान किए गए गिटहब एप्लिकेशन विवरण का उपयोग करके प्रमाणीकरण प्रवाह को स्वचालित रूप से संभालने के लिए समर्थन प्रदान करता है। सुनिश्चित करें कि Firebase कंसोल में कॉलबैक URL को डेवलपर कंसोल पर आपके GitHub एप्लिकेशन में कॉलबैक URL के रूप में जोड़ा गया है।

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

GitHub प्रदाता बनाएं और signInWithPopup विधि को क्रेडेंशियल प्रदान करें। यह उपयोगकर्ता को आपके गिटहब एप्लिकेशन में साइन-इन करने के लिए प्रेरित करने के लिए एक नई विंडो ट्रिगर करेगा:

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);
}