Firebase is back at Google I/O on May 10! Register now

Sfederowana tożsamość i logowanie w serwisach społecznościowych

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Uwierzytelnianie społecznościowe to wieloetapowy proces uwierzytelniania, który umożliwia zalogowanie użytkownika do konta lub połączenie go z już istniejącym.

Zarówno platformy natywne, jak i obsługa sieci Web, tworząc poświadczenia, 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 podczas korzystania z logowania przez Google w Firebase, jednak musisz upewnić się, że klucz SHA1 na komputerze został skonfigurowany do użytku z Androidem. Możesz zobaczyć, jak wygenerować klucz w dokumentacji uwierzytelniania .

Upewnij się, że dostawca logowania „Google” jest włączony w konsoli Firebase .

Jeśli Twój użytkownik zaloguje się w Google, po ręcznym zarejestrowaniu konta, jego dostawca uwierzytelniania automatycznie zmieni się na Google ze względu na koncepcję zaufanych dostawców Firebase Authentication. Więcej na ten temat dowiesz się tutaj .

iOS+ i Android

Na platformach natywnych do wyzwolenia przepływu uwierzytelniania wymagana jest biblioteka innej firmy.

Zainstaluj oficjalną wtyczkę google_sign_in .

Po zainstalowaniu uruchom proces logowania i utwórz nowe poświadczenia:

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ć

W internecie pakiet Firebase SDK zapewnia obsługę automatycznej obsługi przepływu uwierzytelniania przy użyciu projektu Firebase. Na przykład:

Utwórz dostawcę uwierzytelniania Google, podając dowolny dodatkowy zakres uprawnień , który 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 poświadczenia do metody signInWithPopup . Spowoduje to pojawienie się nowego okna z monitem o zalogowanie się do Twojego projektu. Alternatywnie możesz użyć signInWithRedirect , aby utrzymać 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

Możesz uwierzytelniać użytkowników w swojej grze na Androida, korzystając z logowania do Gier Play.

Android

Postępuj zgodnie z instrukcjami konfiguracji Google na Androida, a następnie skonfiguruj usługi Gier Play, korzystając z informacji o aplikacji Firebase .

Następujące czynności uruchomią proces logowania, utworzy nowe poświadczenia i zaloguje użytkownika:

final googleUser = await GoogleSignIn(
  signInOption: SignInOption.games,
).signIn();

final googleAuth = await googleUser?.authentication;

if (googleAuth != null) {
  // Create a new credential
  final credential = GoogleAuthProvider.credential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );

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

Facebook

Zanim zaczniesz, skonfiguruj swoją aplikację programisty Facebooka i postępuj zgodnie z procesem konfiguracji, aby włączyć logowanie na Facebooku.

Upewnij się, że dostawca logowania „Facebook” jest włączony w konsoli Firebase . z zestawem identyfikatora i klucza tajnego aplikacji Facebook.

iOS+ i Android

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

Zainstaluj wtyczkę flutter_facebook_auth .

Musisz wykonać kroki opisane w dokumentacji wtyczki, aby upewnić się, że oba pakiety SDK dla Androida i iOS dla Facebooka zostały poprawnie zainicjowane. Po zakończeniu uruchom proces logowania, utwórz poświadczenia do Facebooka i zaloguj się:

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 Firebase SDK zapewnia obsługę automatycznej obsługi przepływu uwierzytelniania przy użyciu szczegółów aplikacji Facebook dostępnych w konsoli Firebase. Na przykład:

Utwórz dostawcę Facebooka, zapewniając dodatkowy zakres uprawnień , który chcesz uzyskać od użytkownika.

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

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

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

Podaj poświadczenia do metody signInWithPopup . Spowoduje to pojawienie się nowego okna z monitem o zalogowanie się do aplikacji Facebooka:

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

Jabłko

iOS+

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

Następnie upewnij się, że Twoje aplikacje Runner mają funkcję „Zaloguj się przez Apple”.

Android

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

Sieć

Zanim zaczniesz, skonfiguruj Zaloguj się za pomocą 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);
  }
}

Microsoft

iOS+

Zanim zaczniesz, skonfiguruj Logowanie Microsoft dla systemu iOS i dodaj niestandardowe schematy adresów URL do swojego Runnera (krok 1) .

Android

Zanim zaczniesz, skonfiguruj Microsoft Login dla Androida .

Nie zapomnij dodać odcisku palca SHA-1 aplikacji.

Sieć

Przed rozpoczęciem 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);
  }
}

Świergot

Upewnij się, że dostawca logowania na Twitterze jest włączony w konsoli Firebase za pomocą zestawu kluczy API i tajnych kluczy API. Upewnij się, że identyfikator URI przekierowania Firebase OAuth (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 żądanie podwyższonego dostępu do interfejsu API .

iOS+

Musisz skonfigurować niestandardowy schemat adresu URL zgodnie z opisem w przewodniku iOS, krok 1 .

Android

Jeśli nie określiłeś jeszcze odcisku cyfrowego SHA-1 swojej aplikacji, zrób to na stronie Ustawienia w konsoli Firebase. Zapoznaj się z sekcją Uwierzytelnianie klienta , aby dowiedzieć się, jak uzyskać odcisk palca SHA-1 aplikacji.

Sieć

Działa po wyjęciu z pudełka.

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

iOS+ i Android

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

W przypadku systemu iOS dodaj niestandardowy schemat adresu URL zgodnie z opisem w przewodniku dotyczącym systemu iOS, krok 1.

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

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

Sieć

W Internecie zestaw SDK GitHub zapewnia obsługę automatycznej obsługi przepływu uwierzytelniania przy użyciu szczegółów aplikacji GitHub dostępnych w konsoli Firebase. Upewnij się, że adres URL wywołania zwrotnego w konsoli Firebase został dodany jako adres URL wywołania zwrotnego w aplikacji GitHub w konsoli programisty.

Na przykład:

Utwórz dostawcę GitHub i podaj poświadczenia do metody signInWithPopup . Spowoduje to pojawienie się nowego okna z monitem o zalogowanie się do 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);
}

Wieśniak

Upewnij się, że dostawca logowania „Yahoo” jest włączony w konsoli Firebase przy użyciu zestawu klucza i klucza API API. Upewnij się też, że identyfikator URI przekierowania Firebase OAuth (np. my-app-12345.firebaseapp.com/__/auth/handler) jest ustawiony jako identyfikator URI przekierowania w konfiguracji Yahoo Developer Network Twojej aplikacji.

iOS+

Zanim zaczniesz, skonfiguruj Yahoo Login dla iOS i dodaj niestandardowe schematy adresów URL do swojego Runnera (krok 1) .

Android

Zanim zaczniesz, skonfiguruj Yahoo Login dla Androida .

Nie zapomnij dodać odcisku palca SHA-1 aplikacji.

Sieć

Działa po wyjęciu z pudełka.

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

Korzystanie z tokena dostępu OAuth

Korzystając z AuthProvider, możesz pobrać token dostępu skojarzony z dostawcą, wykonując następujące żą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ć następującej metody: ```dart await FirebaseAuth.instance.signInAnonymously();

końcowy AppleProvider = AppleAuthProvider();

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

// Możesz również użyć linkWithRedirect } else { await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// Jesteś anonimowym użytkownikiem, który został uaktualniony, aby móc połączyć się za pomocą funkcji Zaloguj się przez Apple ```

Uwierzytelnij się ponownie u dostawcy

Ten sam wzorzec może być używany z reauthenticateWithProvider , który może służyć do pobierania świeżych poświadczeń dla poufnych operacji, które wymagają 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