Login sosial & identitas gabungan

Autentikasi sosial adalah alur autentikasi multilangkah yang memungkinkan Anda dapat memproses login pengguna ke sebuah akun atau menautkan pengguna dengan akun yang sudah ada.

Platform native dan web mendukung pembuatan kredensial yang kemudian dapat diteruskan ke metode signInWithCredential atau linkWithCredential. Atau, di platform web, Anda dapat memicu proses autentikasi melalui pop-up atau pengalihan.

Google

Sebagian besar konfigurasi sudah disiapkan saat menggunakan Login dengan Google di Firebase, tetapi Anda harus memastikan kunci SHA1 mesin Anda telah dikonfigurasi untuk digunakan dengan Android. Anda dapat melihat cara membuat kunci di dokumentasi autentikasi.

Pastikan penyedia login "Google" diaktifkan di Firebase Console.

Jika pengguna Anda login dengan Google, setelah mendaftarkan akun secara manual, penyedia autentikasi mereka akan otomatis beralih ke Google, disebabkan oleh konsep penyedia tepercaya Firebase Authentication. Anda dapat mempelajari lebih lanjut tentang hal tersebut di sini.

iOS+ dan Android

Di platform native, library pihak ketiga diperlukan untuk memicu alur autentikasi.

Instal plugin google_sign_in resmi.

Setelah diinstal, picu alur login dan buat kredensial baru:

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

Web

Di web, Firebase SDK menyediakan dukungan untuk menangani alur autentikasi secara otomatis menggunakan project Firebase Anda. Contoh:

Buat penyedia autentikasi Google, yang memberikan cakupan izin tambahan apa pun yang ingin diperoleh dari pengguna:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

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

Berikan kredensial ke metode signInWithPopup. Tindakan ini akan memicu jendela baru muncul yang meminta pengguna untuk login ke project Anda. Atau, Anda dapat menggunakan signInWithRedirect untuk menjaga proses autentikasi tetap berada di jendela yang sama.

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 Game (khusus Android)

Pastikan penyedia login "Play Game" diaktifkan di Firebase Console. Ikuti petunjuk berikut untuk penyiapan project Firebase Play Game.

Ikuti petunjuk untuk mengonfigurasi layanan Play Game dengan aplikasi Firebase Anda.

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

Sebelum memulai, siapkan Aplikasi Developer Facebook dan ikuti proses penyiapan untuk mengaktifkan Login dengan Facebook.

Pastikan penyedia login "Facebook" diaktifkan di Firebase Console. dengan Rahasia dan ID Aplikasi Facebook ditetapkan.

iOS+ dan Android

Di platform native, library pihak ketiga diperlukan untuk menginstal Facebook SDK dan memicu alur autentikasi.

Instal plugin flutter_facebook_auth.

Anda harus mengikuti langkah-langkah dalam dokumentasi plugin untuk memastikan bahwa SDK Facebook Android & iOS telah diinisialisasi dengan benar. Setelah selesai, picu alur login, buat kredensial Facebook, lalu buat pengguna login:

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

Web

Di web, Firebase SDK menyediakan dukungan untuk menangani alur autentikasi secara otomatis menggunakan detail aplikasi Facebook yang disediakan di Firebase console. Contoh:

Buat penyedia Facebook, dan berikan cakupan izin tambahan apa pun yang ingin diperoleh dari pengguna.

Pastikan URI pengalihan OAuth dari Firebase console ditambahkan sebagai URI Pengalihan OAuth yang valid di Aplikasi Facebook Anda.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

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

Berikan kredensial ke metode signInWithPopup. Tindakan ini akan memicu jendela baru muncul yang meminta pengguna untuk login ke aplikasi Facebook Anda:

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+

Sebelum mulai, konfigurasi Login dengan Apple dan aktifkan Apple sebagai penyedia login.

Berikutnya, pastikan aplikasi Runner Anda memiliki kemampuan "Login dengan Apple".

Android

Sebelum mulai, konfigurasi Login dengan Apple dan aktifkan Apple sebagai penyedia login.

Web

Sebelum mulai, konfigurasi Login dengan Apple dan aktifkan Apple sebagai penyedia login.

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

Khusus login dengan platform Apple

Login dengan Apple di platform iOS+ juga dapat dilakukan dengan metode berikut:

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

Mencabut token autentikasi Apple

Login dengan Apple di platform Apple akan menampilkan kode otorisasi yang dapat digunakan untuk mencabut token autentikasi Apple menggunakan 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 (khusus Apple)

Pastikan penyedia login "Game Center" diaktifkan di Firebase Console. Ikuti petunjuk berikut untuk penyiapan project Firebase Game Center.

Anda harus login dengan Game Center sebelum kredensial Firebase Game Center dapat diterbitkan dan login melalui Firebase. Berikut beberapa petunjuk untuk melakukannya.

iOS+

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

Microsoft

iOS+

Sebelum mulai, konfigurasi Microsoft Login untuk iOS dan tambahkan skema URL kustom ke Runner (langkah 1).

Android

Sebelum mulai, konfigurasi Microsoft Login untuk Android.

Jangan lupa untuk menambahkan sidik jari SHA-1 aplikasi.

Web

Sebelum mulai, konfigurasi Microsoft Login untuk 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

Pastikan penyedia login "Twitter" diaktifkan di Firebase Console dengan Kunci API dan Rahasia API ditetapkan. Pastikan URL pengalihan Firebase OAuth (mis. my-app-12345.firebaseapp.com/__/auth/handler) ditetapkan sebagai URL callback Autorisasi di halaman setelan aplikasi di konfig aplikasi Twitter.

Anda mungkin juga perlu meminta peningkatan akses API bergantung pada aplikasi Anda Google.

iOS+

Anda perlu mengonfigurasi skema URL kustom seperti yang dijelaskan pada panduan iOS langkah 1.

Android

Jika Anda belum menentukan sidik jari SHA-1 aplikasi, lakukan dari halaman Settings di Firebase console. Baca artikel Mengautentikasi Klien untuk mengetahui detail tentang cara mendapatkan sidik jari SHA-1 aplikasi.

Web

Dapat langsung difungsikan.

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

Pastikan Anda telah menyiapkan Aplikasi OAuth dari Setelan Developer GitHub dan bahwa penyedia login "GitHub" diaktifkan di Firebase Console dengan Client ID dan Rahasia ditetapkan, dengan URL callback yang ditetapkan di aplikasi GitHub.

iOS+ dan Android

Untuk platform native, Anda perlu menambahkan google-services.json dan GoogleService-Info.plist.

Untuk iOS, tambahkan skema URL kustom seperti yang dijelaskan pada panduan iOS langkah 1.

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

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

Web

Di web, GitHub SDK menyediakan dukungan untuk menangani alur autentikasi secara otomatis menggunakan detail aplikasi GitHub yang disediakan di Firebase console. Pastikan bahwa URL callback di Firebase console ditambahkan sebagai URL callback pada aplikasi GitHub Anda di konsol developer.

Contoh:

Buat penyedia GitHub dan berikan kredensial ke metode signInWithPopup. Tindakan ini akan memicu jendela baru muncul yang meminta pengguna untuk login ke aplikasi GitHub Anda:

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

Pastikan penyedia login "Yahoo" diaktifkan di Firebase Console dengan Kunci API dan Rahasia API ditetapkan. Pastikan juga URI pengalihan Firebase OAuth Anda (misalnya, my-app-12345.firebaseapp.com/__/auth/handler) ditetapkan sebagai URI pengalihan di konfigurasi Jaringan Developer Yahoo aplikasi Anda.

iOS+

Sebelum mulai, konfigurasi Yahoo Login untuk iOS dan tambahkan skema URL kustom ke Runner (langkah 1).

Android

Sebelum mulai, konfigurasi Yahoo Login untuk Android.

Jangan lupa untuk menambahkan sidik jari SHA-1 aplikasi.

Web

Dapat langsung difungsikan.

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

Menggunakan token akses OAuth

Dengan menggunakan AuthProvider, Anda dapat mengambil token akses yang terkait dengan penyedia dengan membuat permintaan berikut.

final appleProvider = AppleAuthProvider();

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

// You can send requests with the `accessToken`

Menautkan Penyedia Autentikasi

Jika ingin menautkan penyedia ke pengguna saat ini, Anda dapat menggunakan metode berikut: ```dart await FirebaseAuth.instance.signInAnonymously();

final appleProvider = AppleAuthProvider();

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

// Anda juga dapat menggunakan linkWithRedirect } else { await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// Pengguna anonim Anda kini diupgrade agar dapat terhubung dengan Login dengan Apple ```

Mengautentikasi ulang dengan penyedia

Pola yang sama dapat digunakan dengan reauthenticateWithProvider yang dapat digunakan untuk mengambil kredensial baru untuk operasi sensitif yang memerlukan login terbaru.

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