Tożsamość sfederowana i logowanie się w mediach społecznościowych

Uwierzytelnianie społecznościowe to wieloetapowy proces uwierzytelniania, który umożliwia zalogowanie użytkownika na konto lub link z dotychczasową.

Zarówno platformy natywne, jak i internetowe umożliwiają tworzenie danych logowania, które można następnie przekazać do signInWithCredential lub linkWithCredential. Na platformach internetowych możesz też aktywować proces uwierzytelniania za pomocą w wyskakującym okienku lub w przekierowaniu.

Google

Większość konfiguracji jest już konfigurowana w przypadku korzystania z Logowania przez Google za pomocą Firebase, ale musisz upewnić się, że Twój komputer Klucz SHA1 został skonfigurowany do użycia z Androidem. Informacje o tym, jak wygenerować klucz, znajdziesz w dokumentację uwierzytelniania.

Upewnij się, że „Google” dostawcy logowania możesz włączyć w konsoli Firebase.

Jeśli użytkownik zaloguje się przez Google, po ręcznym zarejestrowaniu konta jego dostawca uwierzytelniania automatycznie w Google, w związku z koncepcją uwierzytelniania Firebase, która polega na uwierzytelnianiu dostawcy. Więcej informacji na temat: przeczytaj ten artykuł.

iOS+ i Android

Na platformach natywnych do aktywowania procesu uwierzytelniania wymagana jest biblioteka zewnętrzna.

Zainstaluj oficjalną wtyczkę google_sign_in.

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

Sieć

Pakiet SDK Firebase zapewnia obsługę automatycznej obsługi procesu uwierzytelniania z wykorzystaniem projektu Firebase w przeglądarce. 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 uruchomienie nowego kodu z prośbą o zalogowanie się w projekcie. Możesz też użyć signInWithRedirect, aby zachować proces uwierzytelniania 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 Androida)

Upewnij się, że opcja „Gry Play” dostawcy logowania możesz włączyć w konsoli Firebase. Wykonaj te instrukcje konfigurowania projektu Firebase w Grach Play.

Postępuj zgodnie z tymi instrukcjami konfigurowania usług Gier Play. z aplikacją 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

Zanim zaczniesz, skonfiguruj Facebook Developer App i wykonaj proces konfiguracji, aby włączyć logowanie przez Facebooka.

Upewnij się, że pole „Facebook” dostawcy logowania możesz włączyć w konsoli Firebase. z identyfikatorem aplikacji Facebook i ustawionym tajnym kluczem.

iOS+ i Android

Do zainstalowania pakietu SDK Facebooka i aktywowania procesu uwierzytelniania na platformach natywnych wymagana jest biblioteka zewnętrzna.

Zainstaluj wtyczkę flutter_facebook_auth.

Należy wykonać czynności opisane w dokumentacji wtyczki, aby upewnić się, że zarówno Zainicjowano pakiety SDK Facebooka na iOS . Gdy to zrobisz, 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 zapewnia obsługę automatycznej obsługi procesu uwierzytelniania za pomocą Szczegóły aplikacji Facebooka dostępne w konsoli Firebase. Przykład:

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

Sprawdź, czy identyfikator URI przekierowania OAuth z konsoli Firebase został dodany jako prawidłowy identyfikator URI przekierowania OAuth w aplikacji Facebook.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

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

Podaj dane logowania do metody signInWithPopup. Spowoduje to uruchomienie nowego kodu okno z prośbą o zalogowanie się w aplikacji 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

iOS+

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

Upewnij się, że w Twoich aplikacjach z systemu Runner jest włączona opcja „Zaloguj się przez Apple” działania.

Android

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

Sieć

Zanim zaczniesz, skonfiguruj funkcję Zaloguj 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);
  }
}

Tylko logowanie się na platformie Apple

Logowanie się przez Apple na platformach iOS+ można też uzyskać 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);

Unieważnianie tokenów uwierzytelniania Apple

Logowanie przez Apple na platformach Apple zwraca kod autoryzacji, którego można użyć unieważnić token uwierzytelniania Apple przy użyciu 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!);
}

Apple Game Center (tylko Apple)

Sprawdź, czy „Centrum gier” dostawcy logowania możesz włączyć w konsoli Firebase. Wykonaj te instrukcje konfigurowania projektu Firebase w Centrum gier.

Aby otrzymać dane logowania do Centrum gier Firebase i zalogować się w tej usłudze za pomocą Firebase, musisz zalogować się w Game Center. Oto kilka instrukcji jak to osiągnąć.

iOS+

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

Microsoft

iOS+

Zanim zaczniesz skonfiguruj Microsoft Login na iOS i dodasz schematy niestandardowych adresów URL do aplikacji Runner (krok 1).

Android

Zanim zaczniesz, skonfiguruj Microsoft Login na Androida.

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

Sieć

Zanim zaczniesz, skonfiguruj 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

Upewnij się, że pole „Twitter” dostawca logowania jest włączony w konsoli Firebase. z kluczem API i zestawem tajnych kluczy API. Sprawdź, czy identyfikator URI przekierowania OAuth Firebase (np. my-app-12345.firebaseapp.com/__/auth/handler) jest ustawiony jako adres 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 wysłanie prośby o podwyższone uprawnienia dostępu przez interfejs API.

iOS+

Musisz skonfigurować niestandardowy schemat URL zgodnie z opisem w kroku 1 przewodnika na iOS.

Android

Jeśli odcisk cyfrowy SHA-1 aplikacji nie został jeszcze określony, możesz to zrobić na stronie ustawień. w konsoli Firebase. Szczegółowe informacje o uzyskiwaniu odcisku cyfrowego SHA-1 aplikacji znajdziesz w artykule Uwierzytelnianie klienta.

Sieć

Działa od razu po uruchomieniu.

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 GitHub i masz skonfigurowaną aplikację OAuth że platforma „GitHub” dostawca logowania jest włączony w konsoli Firebase. z identyfikatorem klienta i tajnym kluczem, a adres URL wywołania zwrotnego jest ustawiony w aplikacji na GitHubie.

iOS+ i Android

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

W przypadku iOS dodaj schemat niestandardowego adresu URL zgodnie z opisem w kroku 1 w przewodniku po iOS.

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

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

Sieć

W internecie pakiet GitHub SDK zapewnia obsługę automatycznej obsługi procesu uwierzytelniania za pomocą Szczegóły aplikacji GitHub dostępne w konsoli Firebase. Sprawdź, czy w konsoli Firebase został dodany URL wywołania zwrotnego jako adres URL wywołania zwrotnego w aplikacji GitHub w konsoli programisty.

Przykład:

Utwórz dostawcę GitHuba i podaj dane logowania do metody signInWithPopup. Spowoduje to uruchomienie nowego kodu okno z prośbą o zalogowanie się w aplikacji 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

Sprawdź, czy identyfikator „Yahoo” dostawca logowania jest włączony w konsoli Firebase. z kluczem API i zestawem tajnych kluczy API. Sprawdź też, czy identyfikator URI przekierowania OAuth Firebase (np. my-app-12345.firebaseapp.com/__/auth/handler) jest ustawiony jako identyfikator URI przekierowania w konfiguracji aplikacji Yahoo Developer Network.

iOS+

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

Android

Zanim zaczniesz, skonfiguruj Yahoo Login na Androida.

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

Sieć

Działa od razu po uruchomieniu.

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ą komponentu AuthProvider możesz pobrać token dostępu powiązany z dostawcą o to, aby przesłać:

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: rzutka czekanie na FirebaseAuth.instance.signInAnonymously();

final appleProvider = AppleAuthProvider();

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

// Możesz też użyć parametru linkWithRedirect } Other { akceptacja FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider);

// Twój anonimowy użytkownik został uaktualniony i możesz teraz korzystać z funkcji Zaloguj się przez Apple

Ponownie uwierzytelnij u dostawcy

Tego samego wzorca można użyć z funkcją reauthenticateWithProvider, która umożliwia pobieranie świeżych danych dane logowania do operacji poufnych, które wymagają ostatniego 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