זהות מאוחדת & כניסה ברשתות חברתיות

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

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

Google

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

מוודאים שספק הכניסה 'Google' מופעל במסוף Firebase.

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

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

מתקינים את הפלאגין הרשמי של 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);
}

באינטרנט, 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

לפני שתתחילו להגדיר את Facebook Developer App ובצעו את תהליך ההגדרה כדי להפעיל את Facebook Login.

מוודאים שהשדה "Facebook" ספק הכניסה מופעל במסוף Firebase. עם מזהה האפליקציה והסוד של Facebook.

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

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

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

באינטרנט, ה-SDK של Firebase מספק תמיכה בטיפול אוטומטי בתהליך האימות באמצעות פרטי האפליקציה של Facebook שסופקו במסוף Firebase. לדוגמה:

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

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

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

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

צריך לספק את פרטי הכניסה ל-method 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

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

בשלב הבא, צריך לוודא שהאפשרויות 'כניסה באמצעות Apple' נמצאות באפליקציות Runner ליכולות של בינה מלאכותית גנרטיבית.

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

לפני שמתחילים, צריך להגדיר את הכניסה באמצעות Apple ולהפעיל את 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 בלבד

ניתן לבצע כניסה של 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 באמצעות ה-API‏ revokeTokenWithAuthorizationCode().

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 בלבד)

מוודאים שספק הכניסה Game Center מופעל במסוף Firebase. מבצעים את ההוראות האלה להגדרת פרויקט Firebase במרכז המשחקים.

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

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

Microsoft

לפני שמתחילים להגדיר את Microsoft Login ל-iOS ולהוסיף את הסכימות של כתובות ה-URL המותאמות אישית ל-Runner (שלב 1).

לפני שמתחילים בהגדרת Microsoft Login ל-Android.

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

מוודאים שהשדה "Twitter" ספק הכניסה מופעל במסוף Firebase באמצעות מפתח API וסוד API. מוודאים שה-URI ב-Firebase OAuth מפנה לכתובת אחרת (למשל my-app-12345.firebaseapp.com/__/auth/handler) מוגדרת ככתובת ה-URL לקריאה חוזרת (callback) של ההרשאה בדף ההגדרות של האפליקציה בהגדרות של אפליקציית Twitter.

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

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

אם עדיין לא ציינת את טביעת האצבע 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

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

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

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

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

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

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

לדוגמה:

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

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

לפני שמתחילים, מגדירים את Yahoo Login ל-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`

קישור ספק אימות

כדי לקשר ספק למשתמש קיים, אפשר להשתמש בשיטה הבאה: ```dart await FirebaseAuth.instance.signInAnonymously();

Final appleProvider = AppleAuthProvider();

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

// אפשר גם להשתמש ב-linkWithRedirect } else { await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// You'reAnonymous user is now updated to be can 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