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

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 instalacyjnej .

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

Facebook

Zanim zaczniesz, skonfiguruj swoją aplikację Facebook Developer App 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+ i Android

Zanim zaczniesz, skonfiguruj funkcję Sign In with Apple i włącz Apple jako dostawcę logowania .

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

Zainstaluj wtyczkę sign_in_with_apple , a także pakiet crypto :

dependencies:
  sign_in_with_apple: ^3.0.0
  crypto: ^3.0.1
import 'dart:convert';
import 'dart:math';

import 'package:crypto/crypto.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:sign_in_with_apple/sign_in_with_apple.dart';

/// Generates a cryptographically secure random nonce, to be included in a
/// credential request.
String generateNonce([int length = 32]) {
  const charset =
      '0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._';
  final random = Random.secure();
  return List.generate(length, (_) => charset[random.nextInt(charset.length)])
      .join();
}

/// Returns the sha256 hash of [input] in hex notation.
String sha256ofString(String input) {
  final bytes = utf8.encode(input);
  final digest = sha256.convert(bytes);
  return digest.toString();
}

Future<UserCredential> signInWithApple() async {
  // To prevent replay attacks with the credential returned from Apple, we
  // include a nonce in the credential request. When signing in with
  // Firebase, the nonce in the id token returned by Apple, is expected to
  // match the sha256 hash of `rawNonce`.
  final rawNonce = generateNonce();
  final nonce = sha256ofString(rawNonce);

  // Request credential for the currently signed in Apple account.
  final appleCredential = await SignInWithApple.getAppleIDCredential(
    scopes: [
      AppleIDAuthorizationScopes.email,
      AppleIDAuthorizationScopes.fullName,
    ],
    nonce: nonce,
  );

  // Create an `OAuthCredential` from the credential returned by Apple.
  final oauthCredential = OAuthProvider("apple.com").credential(
    idToken: appleCredential.identityToken,
    rawNonce: rawNonce,
  );

  // Sign in the user with Firebase. If the nonce we generated earlier does
  // not match the nonce in `appleCredential.identityToken`, sign in will fail.
  return await FirebaseAuth.instance.signInWithCredential(oauthCredential);
}

Sieć

Zanim zaczniesz, skonfiguruj funkcję Sign In with Apple i włącz Apple jako dostawcę logowania .

import 'package:firebase_auth/firebase_auth.dart';

Future<UserCredential> signInWithApple() async {
  // Create and configure an OAuthProvider for Sign In with Apple.
  final provider = OAuthProvider("apple.com")
    ..addScope('email')
    ..addScope('name');

  // Sign in the user with Firebase.
  return await FirebaseAuth.instance.signInWithPopup(provider);
}

Alternatywą jest użycie signInWithRedirect . W takim przypadku przeglądarka odejdzie od Twojej aplikacji i będziesz musiał użyć getRedirectResult , aby sprawdzić wyniki uwierzytelniania podczas uruchamiania aplikacji.

Świergot

Upewnij się, że dostawca logowania na Twitterze jest włączony w konsoli Firebase za pomocą zestawu kluczy API i tajnych kluczy API.

iOS+ i Android

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

Zainstaluj wtyczkę twitter_login :

dependencies:
  twitter_login: ^4.0.1

Pamiętaj, aby dokładnie przejść przez kroki konfiguracji twitter_login i zarejestrować adres URL wywołania zwrotnego w portalu dla programistów Twittera z pasującym schematem adresu URL

import 'package:twitter_login/twitter_login.dart';

Future<UserCredential> signInWithTwitter() async {
  // Create a TwitterLogin instance
  final twitterLogin = new TwitterLogin(
    apiKey: '<your consumer key>',
    apiSecretKey:' <your consumer secret>',
    redirectURI: '<your_scheme>://'
  );

  // Trigger the sign-in flow
  final authResult = await twitterLogin.login();

  // Create a credential from the access token
  final twitterAuthCredential = TwitterAuthProvider.credential(
    accessToken: authResult.authToken!,
    secret: authResult.authTokenSecret!,
  );

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithCredential(twitterAuthCredential);
}

Sieć

W Internecie zestaw Twitter SDK zapewnia obsługę automatycznej obsługi przepływu uwierzytelniania przy użyciu szczegółów aplikacji Twittera 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 Twittera w konsoli programisty.

Na przykład:

Utwórz dostawcę Twittera i podaj poświadczenia do metody signInWithPopup . Spowoduje to pojawienie się nowego okna z monitem o zalogowanie się do aplikacji Twittera:

Future<UserCredential> signInWithTwitter() async {
  // Create a new provider
  TwitterAuthProvider twitterProvider = TwitterAuthProvider();

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(twitterProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(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

Na platformach natywnych do zainstalowania zestawu SDK GitHub i wyzwolenia przepływu uwierzytelniania wymagana jest biblioteka innej firmy.

Zainstaluj wtyczkę github_sign_in :

dependencies:
  github_sign_in: ^0.0.5-dev.4

Musisz wypełnić instancję GitHubSignIn swoim identyfikatorem klienta GitHub, kluczem tajnym klienta GitHub, a także adresem URL przekierowania (adres URL wywołania zwrotnego Firebase). Po zakończeniu wyzwalania procesu logowania utwórz poświadczenia GitHub i zaloguj się:

import 'package:github_sign_in/github_sign_in.dart';

Future<UserCredential> signInWithGitHub() async {
  // Create a GitHubSignIn instance
      final GitHubSignIn gitHubSignIn = GitHubSignIn(
          clientId: clientId,
          clientSecret: clientSecret,
          redirectUrl: 'https://my-project.firebaseapp.com/__/auth/handler');

  // Trigger the sign-in flow
  final result = await gitHubSignIn.signIn(context);

  // Create a credential from the access token
  final githubAuthCredential = GithubAuthProvider.credential(result.token);

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithCredential(githubAuthCredential);
}

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