זהות מאוחדת וכניסה באמצעות חשבון ברשתות החברתיות

אימות באמצעות רשתות חברתיות הוא תהליך אימות רב-שלבי שמאפשר לכם לרשום משתמש לחשבון או לקשר אותו לחשבון קיים.

גם בפלטפורמות מקוריות וגם באינטרנט אפשר ליצור אמצעי אימות, ואז להעביר אותו לשיטות signInWithCredential או linkWithCredential. לחלופין, בפלטפורמות אינטרנט, אפשר להפעיל את תהליך האימות באמצעות חלון קופץ או הפניה אוטומטית.

Google

רוב ההגדרות כבר מוגדרות כשמשתמשים בכניסה באמצעות חשבון Google עם Firebase, אבל צריך לוודא שמפתח ה-SHA1 של המחשב הוגדר לשימוש עם Android. במסמכי האימות מוסבר איך ליצור את המפתח.

מוודאים שספק הכניסה 'Google' מופעל בFirebaseמסוף (עוברים אל אבטחה > אימות > הכרטיסייה שיטת כניסה).

אם המשתמש נכנס באמצעות 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 בלבד)

מוודאים שספק הכניסה 'Play Games' מופעל במסוף Firebase (עוברים אל אבטחה > אימות > הכרטיסייה שיטת כניסה). פועלים לפי ההוראות האלה כדי להגדיר פרויקט Firebase של Play Games.

פועלים לפי ההוראות להגדרת Play Games Services באפליקציית Firebase.

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

לפני שמתחילים, צריך להגדיר את אפליקציית המפתחים של פייסבוק ולפעול לפי תהליך ההגדרה כדי להפעיל את ההתחברות באמצעות פייסבוק.

מוודאים שספק הכניסה 'פייסבוק' מופעל במסוף Firebase עם מזהה האפליקציה והסוד של פייסבוק (עוברים אל אבטחה > אימות > הכרטיסייה שיטת כניסה).

‫iOS+‎ ו-Android

בפלטפורמות Native, נדרשת ספרייה של צד שלישי כדי להתקין את Facebook SDK ולהפעיל את תהליך האימות.

מתקינים את הפלאגין flutter_facebook_auth.

כדי לוודא שבוצעה הפעלה תקינה של ה-SDK של פייסבוק ל-Android ול-iOS, צריך לפעול לפי השלבים שמפורטים במסמכי התיעוד של הפלאגין. אחרי שמסיימים, מפעילים את תהליך הכניסה, יוצרים פרטי כניסה ל-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. לדוגמה:

יוצרים ספק פייסבוק ומציינים היקף הרשאות נוסף שרוצים לקבל מהמשתמש.

מוודאים שכתובת ה-URI להפניה אוטומטית של OAuth ממסוף Firebase נוספה כאחת מכתובות ה-URI התקינות להפניה אוטומטית של OAuth באפליקציית Facebook.

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

Apple

‫iOS+‎

לפני שמתחילים, צריך להגדיר את הכניסה באמצעות אפל ולהפעיל את אפל כספק של שירותי כניסה.

לאחר מכן, מוודאים שלRunnerאפליקציות יש את היכולת 'כניסה באמצעות חשבון אפל'.

Android

לפני שמתחילים, צריך להגדיר את הכניסה באמצעות אפל ולהפעיל את אפל כספק של שירותי כניסה.

אינטרנט

לפני שמתחילים, צריך להגדיר את הכניסה באמצעות אפל ולהפעיל את אפל כספק של שירותי כניסה.

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

אפשר להיכנס לחשבון Apple בפלטפורמות iOS+ גם בשיטה הבאה:

// 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 מחזירה קוד הרשאה שאפשר להשתמש בו כדי לבטל את טוקן האימות של Apple באמצעות revokeTokenWithAuthorizationCode()API.

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

מרכז המשחקים של אפל (אפל בלבד)

מוודאים שספק הכניסה 'Game Center' מופעל בFirebaseמסוף (עוברים אל אבטחה > אימות > הכרטיסייה שיטת כניסה). פועלים לפי ההוראות האלה כדי להגדיר פרויקט Firebase ב-Game Center.

תצטרכו להתחבר באמצעות Game Center לפני שאפשר יהיה להנפיק אישור של Game Center ב-Firebase ולהתחבר דרך Firebase. כאן אפשר למצוא הוראות לביצוע הפעולה הזו.

‫iOS+‎

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

Microsoft

‫iOS+‎

לפני שמתחילים, מגדירים את הכניסה לחשבון מיקרוסופט ב-iOS ומוסיפים את סכימות כתובות ה-URL בהתאמה אישית ל-Runner (שלב 1).

Android

לפני שמתחילים, מגדירים את הכניסה לחשבון מיקרוסופט ב-Android.

אל תשכחו להוסיף את טביעת האצבע SHA-1 של האפליקציה.

אינטרנט

לפני שמתחילים, מגדירים את Microsoft Login for Web.

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 עם מפתח API וסוד API מוגדרים (עוברים אל Security (אבטחה) > Authentication (אימות) > Sign-in method (שיטת כניסה)). מוודאים שכתובת ה-URI להפניה אוטומטית של Firebase OAuth (לדוגמה, my-app-12345.firebaseapp.com/__/auth/handler) מוגדרת ככתובת ה-URL של הקריאה החוזרת לאימות בדף ההגדרות של האפליקציה בהגדרות האפליקציה של טוויטר.

יכול להיות שתצטרכו גם לבקש גישה ל-API ברמה גבוהה יותר, בהתאם לאפליקציה.

‫iOS+‎

צריך להגדיר את סכמת כתובות ה-URL המותאמת אישית כפי שמתואר בשלב 1 במדריך ל-iOS.

Android

אם עדיין לא עשיתם זאת, מציינים את טביעת האצבע של SHA-1 של האפליקציה:

  1. במסוף Firebase, עוברים אל הגדרות > הכרטיסייה כללי.

  2. גוללים למטה אל הכרטיס האפליקציות שלך, בוחרים את אפליקציית Android ומוסיפים את טביעת האצבע מסוג SHA-1 בשדה טביעות אצבע של אישור SHA.

במאמר אימות הלקוח מוסבר איך מקבלים את טביעת האצבע של ה-SHA של האפליקציה.

אינטרנט

הוא פועל מיד.

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

מוודאים שהגדרתם אפליקציית OAuth מתוך הגדרות הפיתוח ב-GitHub ושהפעלתם את ספק הכניסה 'GitHub' במסוף Firebase (עוברים אל אבטחה > אימות > הכרטיסייה שיטת כניסה). מוודאים שמזהה הלקוח והסוד מוגדרים, וכתובת ה-URL לקריאה חוזרת מוגדרת באפליקציית GitHub.

‫iOS+‎ ו-Android

בפלטפורמות מקוריות, צריך להוסיף את google-services.json ואת GoogleService-Info.plist.

ב-iOS, מוסיפים את סכימת כתובת ה-URL המותאמת אישית כמו שמתואר בשלב 1 במדריך ל-iOS.

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

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

אינטרנט

באינטרנט, GitHub SDK מספק תמיכה בטיפול אוטומטי בתהליך האימות באמצעות פרטי אפליקציית GitHub שסופקו במסוף Firebase. מוודאים שכתובת ה-URL של הקריאה החוזרת במסוף Firebase נוספה ככתובת URL של קריאה חוזרת באפליקציית GitHub ב-Developer Console.

לדוגמה:

יוצרים ספק 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

מוודאים שספק הכניסה 'Yahoo' מופעל במסוף Firebase עם מפתח API וסוד API מוגדרים (עוברים אל Security (אבטחה) > Authentication (אימות) > הכרטיסייה Sign-in method (שיטת כניסה)). בנוסף, צריך לוודא שמזהה ה-URI להפניה אוטומטית של Firebase OAuth (לדוגמה, my-app-12345.firebaseapp.com/__/auth/handler) מוגדר כמזהה URI להפניה אוטומטית בהגדרות של אפליקציית Yahoo Developer Network.

‫iOS+‎

לפני שמתחילים, צריך להגדיר את הכניסה לחשבון Yahoo ב-iOS ולהוסיף את סכימות כתובות ה-URL המותאמות אישית ל-Runner (שלב 1).

Android

לפני שמתחילים, צריך להגדיר את הכניסה לחשבון Yahoo ב-Android.

אל תשכחו להוסיף את טביעת האצבע 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