Tożsamość sfederowana i logowanie przez platformy społecznościowe

Uwierzytelnianie w mediach społecznościowych to wieloetapowy proces uwierzytelniania, który umożliwia zalogowanie użytkownika na konto lub połączenie go z istniejącym kontem.

Zarówno platformy natywne, jak i internetowe obsługują tworzenie danych logowania, które można następnie przekazać do metod signInWithCredential lub linkWithCredential. Alternatywnie na platformach internetowych możesz uruchomić proces uwierzytelniania za pomocą wyskakującego okienka lub przekierowania.

Google

Większość konfiguracji jest już skonfigurowana, gdy używasz logowania przez Google z Firebase. Musisz jednak sprawdzić, czy klucz SHA1 Twojego komputera został skonfigurowany do użycia z Androidem. Informacje o tym, jak wygenerować klucz, znajdziesz w dokumentacji uwierzytelniania.

Upewnij się, że dostawca logowania "Google" jest włączony w konsoli Firebase (kliknij kartę Bezpieczeństwo > Uwierzytelnianie > Metoda logowania).

Jeśli użytkownik zaloguje się przez Google po ręcznym zarejestrowaniu konta, jego dostawca uwierzytelniania automatycznie zmieni się na Google ze względu na koncepcję zaufanych dostawców w Firebase Authentication. Więcej informacji o tym znajdziesz tutaj.

iOS+ i Android

Na platformach natywnych do uruchomienia procesu uwierzytelniania wymagana jest biblioteka innej firmy.

Zainstaluj oficjalną google_sign_in wtyczkę.

Po zainstalowaniu uruchom proces logowania i utwórz nowe dane logowania:

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

Sieć

W internecie pakiet SDK Firebase obsługuje automatyczne zarządzanie procesem uwierzytelniania za pomocą projektu w Firebase. Przykład:

Utwórz dostawcę uwierzytelniania Google, podając dodatkowe zakresy uprawnień które chcesz uzyskać od użytkownika:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

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

Podaj dane logowania do metody signInWithPopup. Spowoduje to wyświetlenie nowego okna z prośbą o zalogowanie się w projekcie. Możesz też użyć metody signInWithRedirect, aby proces uwierzytelniania przebiegał w tym samym oknie.

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

Gry Google Play (tylko na Androidzie)

Upewnij się, że dostawca logowania "Gry Play" jest włączony w konsoli Firebase (kliknij kartę Bezpieczeństwo > Uwierzytelnianie > Metoda logowania). Aby skonfigurować projekt w Firebase dla Gier Play, postępuj zgodnie z tymi instrukcjami .

Aby skonfigurować usługi Gier Play w aplikacji w Firebase, postępuj zgodnie z tymi instrukcjami.

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

Zanim zaczniesz, skonfiguruj aplikację dla deweloperów na Facebooku i postępuj zgodnie z instrukcjami, aby włączyć logowanie przez Facebooka.

Upewnij się, że dostawca logowania "Facebook" jest włączony w konsoli Firebase z ustawionym identyfikatorem aplikacji na Facebooku i kluczem tajnym (kliknij kartę Bezpieczeństwo > Uwierzytelnianie > Metoda logowania).

iOS+ i Android

Na platformach natywnych do zainstalowania pakietu SDK Facebooka i uruchomienia procesu uwierzytelniania wymagana jest biblioteka innej firmy.

Zainstaluj wtyczkę flutter_facebook_auth.

Aby mieć pewność, że pakiety SDK Facebooka na Androida i iOS zostały prawidłowo zainicjowane, musisz wykonać czynności opisane w dokumentacji wtyczki. Po zakończeniu uruchom proces logowania, utwórz dane logowania do Facebooka i zaloguj użytkownika:

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

Sieć

W internecie pakiet SDK Firebase obsługuje automatyczne zarządzanie procesem uwierzytelniania za pomocą danych aplikacji na Facebooku podanych w Firebase konsoli. Przykład:

Utwórz dostawcę Facebooka, podając dodatkowe zakresy uprawnień , które chcesz uzyskać od użytkownika.

Upewnij się, że identyfikator URI przekierowania OAuth z konsoli Firebase jest dodany jako prawidłowy identyfikator URI przekierowania OAuth w aplikacji na Facebooku.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

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

Podaj dane logowania do metody signInWithPopup. Spowoduje to wyświetlenie nowego okna z prośbą o zalogowanie się w aplikacji na Facebooku:

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+

Zanim zaczniesz, skonfiguruj logowanie się przez Apple i włącz Apple jako dostawcę logowania.

Następnie upewnij się, że aplikacje Runner mają uprawnienie „Logowanie się przez Apple”.

Android

Zanim zaczniesz, skonfiguruj logowanie się przez Apple i włącz Apple jako dostawcę logowania.

Sieć

Zanim zaczniesz, skonfiguruj logowanie się przez Apple i włącz Apple jako dostawcę logowania.

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

Logowanie tylko na platformie Apple

Logowanie przez Apple na platformach iOS+ można też zrealizować za pomocą tej metody:

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

Odwoływanie tokenów uwierzytelniania Apple

Logowanie przez Apple na platformach Apple zwraca kod autoryzacji, którego można użyć do odwołania tokena uwierzytelniania Apple za pomocą interfejsu 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!);
}

Centrum Gier Apple (tylko Apple)

Upewnij się, że dostawca logowania "Centrum Gier" jest włączony w konsoli Firebase (kliknij kartę Bezpieczeństwo > Uwierzytelnianie > Metoda logowania). Aby skonfigurować projekt w Firebase dla Centrum Gier, postępuj zgodnie z tymi instrukcjami.

Zanim będzie można wydać dane logowania do Centrum Gier Firebase i zalogować się za pomocą Firebase, musisz zalogować się w Centrum Gier. Oto kilka instrukcji jak to zrobić.

iOS+

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

Microsoft

iOS+

Zanim zaczniesz, skonfiguruj logowanie przez Microsoft na iOS i dodaj niestandardowe schematy adresów URL do aplikacji Runner (krok 1).

Android

Zanim zaczniesz, skonfiguruj logowanie przez Microsoft na Androidzie.

Nie zapomnij dodać odcisku cyfrowego SHA-1 swojej aplikacji.

Sieć

Zanim zaczniesz, skonfiguruj logowanie przez Microsoft w internecie.

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

Upewnij się, że dostawca logowania "Twitter" jest włączony w konsoli Firebasez ustawionym kluczem API i kluczem tajnym API (kliknij kartę Bezpieczeństwo > Uwierzytelnianie > Metoda logowania). Upewnij się, że identyfikator URI przekierowania OAuth Firebase (np. my-app-12345.firebaseapp.com/__/auth/handler) jest ustawiony jako URL wywołania zwrotnego autoryzacji na stronie ustawień aplikacji w konfiguracji aplikacji na Twitterze.

W zależności od aplikacji może być też konieczne poproszenie o rozszerzony dostęp do interfejsu API.

iOS+

Musisz skonfigurować niestandardowy schemat URI adresu URL zgodnie z opisem w kroku 1 przewodnika po iOS.

Android

Jeśli jeszcze tego nie zrobisz, określ odcisk cyfrowy SHA-1 swojej aplikacji:

  1. W konsoli Firebase otwórz ustawienia Ustawienia > Ogólne tab.

  2. Przewiń w dół do karty Twoje aplikacje , wybierz aplikację na Androida i dodaj odcisk cyfrowy SHA-1 w polu Odciski cyfrowe certyfikatu SHA.

Więcej informacji o tym, jak uzyskać odcisk cyfrowy SHA aplikacji, znajdziesz w artykule Uwierzytelnianie klienta.

Sieć

Działa od razu.

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

Upewnij się, że w ustawieniach dewelopera na GitHubie skonfigurowano aplikację OAuth oraz że dostawca logowania "GitHub" jest włączony w konsoli Firebase (kliknij kartę Bezpieczeństwo > Uwierzytelnianie > Metoda logowania). Upewnij się, że ustawiono identyfikator klienta i klucz tajny oraz że w aplikacji na GitHubie ustawiono adres URL wywołania zwrotnego.

iOS+ i Android

W przypadku platform natywnych musisz dodać pliki google-services.json i GoogleService-Info.plist.

W przypadku iOS dodaj niestandardowy schemat URI adresu URL zgodnie z opisem w przewodniku po iOS krok 1.

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

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

Sieć

W internecie pakiet SDK GitHub obsługuje automatyczne zarządzanie procesem uwierzytelniania za pomocą danych aplikacji na GitHubie podanych w Firebase konsoli. Upewnij się, że adres URL wywołania zwrotnego w konsoli Firebasejest dodany jako adres URL wywołania zwrotnego w aplikacji na GitHubie w konsoli dewelopera.

Przykład:

Utwórz dostawcę GitHub i podaj dane logowania do metody signInWithPopup. Spowoduje to wyświetlenie nowego okna z prośbą o zalogowanie się w aplikacji na GitHubie:

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

Upewnij się, że dostawca logowania "Yahoo" jest włączony w konsoli Firebasez ustawionym kluczem API i kluczem tajnym API (kliknij kartę Bezpieczeństwo > Uwierzytelnianie > Metoda logowania). Upewnij się też, że identyfikator URI przekierowania OAuth Firebase (np. my-app-12345.firebaseapp.com/__/auth/handler) jest ustawiony jako identyfikator URI przekierowania w konfiguracji aplikacji w Yahoo Developer Network.

iOS+

Zanim zaczniesz, skonfiguruj logowanie przez Yahoo na iOS i dodaj niestandardowe schematy adresów URL do aplikacji Runner (krok 1).

Android

Zanim zaczniesz, skonfiguruj logowanie przez Yahoo na Androidzie.

Nie zapomnij dodać odcisku cyfrowego SHA-1 swojej aplikacji.

Sieć

Działa od razu.

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

Używanie tokena dostępu OAuth

Za pomocą AuthProvider możesz pobrać token dostępu powiązany z dostawcą, wysyłając to żądanie.

final appleProvider = AppleAuthProvider();

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

// You can send requests with the `accessToken`

Łączenie dostawcy uwierzytelniania

Jeśli chcesz połączyć dostawcę z bieżącym użytkownikiem, możesz użyć tej metody:

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

Ponowne uwierzytelnianie u dostawcy

Ten sam wzorzec można stosować z metodą reauthenticateWithProvider, której można użyć do pobrania nowych danych logowania na potrzeby operacji wymagających niedawnego logowania.

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