Thông tin nhận dạng liên kết & đăng nhập xã hội

Xác thực xã hội là quy trình xác thực nhiều bước, cho phép bạn đăng nhập người dùng vào tài khoản hoặc liên kết họ với tài khoản hiện có.

Cả nền tảng gốc và web đều hỗ trợ tạo thông tin xác thực sau đó có thể được chuyển cho các phương thức signInWithCredential hoặc linkWithCredential . Ngoài ra, trên nền tảng web, bạn có thể kích hoạt quá trình xác thực thông qua cửa sổ bật lên hoặc chuyển hướng.

Google

Hầu hết cấu hình đều đã được thiết lập khi sử dụng Đăng nhập bằng Google với Firebase, tuy nhiên, bạn cần đảm bảo rằng khóa SHA1 trên máy của mình đã được định cấu hình để sử dụng với Android. Bạn có thể xem cách tạo khóa trên tài liệu Cài đặt .

Đảm bảo rằng nhà cung cấp dịch vụ đăng nhập "Google" được bật trên Bảng điều khiển Firebase .

Nếu người dùng của bạn đăng nhập bằng Google, sau khi đã đăng ký tài khoản theo cách thủ công, nhà cung cấp dịch vụ xác thực của họ sẽ tự động thay đổi thành Google, do khái niệm Xác thực Firebase về nhà cung cấp đáng tin cậy. Bạn có thể tìm hiểu thêm về điều này ở đây .

iOS + và Android

Trên nền tảng gốc, cần có thư viện của bên thứ 3 để kích hoạt quy trình xác thực.

Cài đặt plugin google_sign_in chính thức.

Sau khi cài đặt, hãy kích hoạt quy trình đăng nhập và tạo thông tin đăng nhập mới:

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

Trên web, SDK Firebase cung cấp hỗ trợ để tự động xử lý luồng xác thực bằng cách sử dụng dự án Firebase của bạn. Ví dụ:

Tạo nhà cung cấp xác thực của Google, cung cấp bất kỳ phạm vi quyền bổ sung nào mà bạn muốn nhận được từ người dùng:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

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

Cung cấp thông tin xác thực cho phương thức signInWithPopup . Thao tác này sẽ kích hoạt một cửa sổ mới xuất hiện nhắc người dùng đăng nhập vào dự án của bạn. Ngoài ra, bạn có thể sử dụng signInWithRedirect để giữ quá trình xác thực trong cùng một cửa sổ.

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

Trước khi bắt đầu, hãy thiết lập Ứng dụng nhà phát triển Facebook của bạn và làm theo quy trình thiết lập để bật Đăng nhập Facebook.

Đảm bảo rằng nhà cung cấp dịch vụ đăng nhập "Facebook" được bật trên Bảng điều khiển Firebase . với ID ứng dụng Facebook và bộ Bí mật.

iOS + và Android

Trên các nền tảng gốc, cần có thư viện của bên thứ 3 để cài đặt Facebook SDK và kích hoạt quy trình xác thực.

Cài đặt plugin flutter_facebook_auth .

Bạn sẽ cần làm theo các bước trong tài liệu plugin để đảm bảo rằng cả SDK Facebook Android và iOS đều đã được khởi chạy chính xác. Sau khi hoàn tất, hãy kích hoạt quy trình đăng nhập, tạo thông tin đăng nhập Facebook và đăng nhập cho người dùng:

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

Trên web, SDK Firebase cung cấp hỗ trợ để tự động xử lý quy trình xác thực bằng cách sử dụng chi tiết ứng dụng Facebook được cung cấp trên bảng điều khiển Firebase. Ví dụ:

Tạo nhà cung cấp Facebook, cung cấp bất kỳ phạm vi quyền bổ sung nào mà bạn muốn có được từ người dùng.

Đảm bảo rằng URI chuyển hướng OAuth từ bảng điều khiển Firebase được thêm làm URI chuyển hướng OAuth hợp lệ trong Ứng dụng Facebook của bạn.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

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

Cung cấp thông tin xác thực cho phương thức signInWithPopup . Thao tác này sẽ kích hoạt một cửa sổ mới xuất hiện nhắc người dùng đăng nhập vào ứng dụng Facebook của bạn:

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

Quả táo

iOS + và Android

Trước khi bạn bắt đầu định cấu hình Đăng nhập với Applecho phép Apple làm nhà cung cấp dịch vụ đăng nhập .

Tiếp theo, hãy đảm bảo rằng các ứng dụng Runner của bạn có khả năng "Đăng nhập bằng Apple".

Cài đặt plugin sign_in_with_apple , cũng như gói tiền điện 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);
}

Web

Trước khi bạn bắt đầu định cấu hình Đăng nhập với Applecho phép Apple làm nhà cung cấp dịch vụ đăng nhập .

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

Một giải pháp thay thế là sử dụng signInWithRedirect . Trong trường hợp đó, trình duyệt sẽ điều hướng khỏi ứng dụng của bạn và bạn phải sử dụng getRedirectResult để kiểm tra kết quả xác thực trong quá trình khởi động ứng dụng.

Twitter

Đảm bảo rằng nhà cung cấp dịch vụ đăng nhập "Twitter" được bật trên Bảng điều khiển Firebase với bộ Khóa API và Bí mật API.

iOS + và Android

Trên nền tảng gốc, cần có thư viện của bên thứ 3 để cài đặt Twitter SDK và kích hoạt quy trình xác thực.

Cài đặt plugin twitter_login :

dependencies:
  twitter_login: ^4.0.1

Đảm bảo thực hiện cẩn thận các bước cấu hình của twitter_login và đăng ký URL gọi lại tại Cổng thông tin nhà phát triển Twitter với lược đồ URL phù hợp

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

Web

Trên web, Twitter SDK cung cấp hỗ trợ để tự động xử lý quy trình xác thực bằng cách sử dụng chi tiết ứng dụng Twitter được cung cấp trên bảng điều khiển Firebase. Đảm bảo rằng URL gọi lại trong bảng điều khiển Firebase được thêm làm URL gọi lại trong ứng dụng Twitter của bạn trên bảng điều khiển dành cho nhà phát triển của họ.

Ví dụ:

Tạo nhà cung cấp Twitter và cung cấp thông tin đăng nhập cho phương thức signInWithPopup . Thao tác này sẽ kích hoạt một cửa sổ mới xuất hiện nhắc người dùng đăng nhập vào ứng dụng Twitter của bạn:

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

Đảm bảo rằng bạn đã thiết lập Ứng dụng OAuth từ Cài đặt nhà phát triển GitHub của mình và nhà cung cấp dịch vụ đăng nhập "GitHub" được bật trên Bảng điều khiển Firebase với ID ứng dụng khách và Bí mật được đặt, với URL gọi lại được đặt trong ứng dụng GitHub.

iOS + và Android

Trên nền tảng gốc, cần có thư viện của bên thứ 3 để cài đặt GitHub SDK và kích hoạt quy trình xác thực.

Cài đặt plugin github_sign_in :

dependencies:
  github_sign_in: ^0.0.5-dev.4

Bạn sẽ cần điền phiên bản GitHubSignIn với ID ứng dụng khách GitHub, Bí mật ứng dụng khách GitHub và cả URL chuyển hướng (url gọi lại Firebase). Sau khi hoàn tất, hãy kích hoạt quy trình đăng nhập, hãy tạo thông tin xác thực GitHub và đăng nhập cho người dùng:

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

Web

Trên web, GitHub SDK cung cấp hỗ trợ để tự động xử lý luồng xác thực bằng cách sử dụng chi tiết ứng dụng GitHub được cung cấp trên bảng điều khiển Firebase. Đảm bảo rằng URL gọi lại trong bảng điều khiển Firebase được thêm làm URL gọi lại trong ứng dụng GitHub của bạn trên bảng điều khiển dành cho nhà phát triển.

Ví dụ:

Tạo nhà cung cấp GitHub và cung cấp thông tin xác thực cho phương thức signInWithPopup . Thao tác này sẽ kích hoạt một cửa sổ mới xuất hiện nhắc người dùng đăng nhập vào ứng dụng GitHub của bạn:

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