Danh tính 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 gồm 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 mà sau đó có thể được chuyển đến 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 đã đượ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 khóa SHA1 của máy đã được định cấu hình để sử dụng với Android. Bạn có thể xem cách tạo khóa trong tài liệu xác thực .

Đảm bảo nhà cung cấp đă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 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 luồng 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 luồng đăng nhập và tạo thông tin xác thực 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 dự án Firebase của bạn. Ví dụ:

Tạo nhà cung cấp xác thực Google, cung cấp mọi phạm vi quyền bổ sung 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 . Điều 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);
}

Trò chơi trên Google Play

Bạn có thể xác thực người dùng trong trò chơi Android của mình bằng cách đăng nhập vào Play Trò chơi.

Android

Làm theo hướng dẫn thiết lập Google trên Android, sau đó định cấu hình dịch vụ Play Trò chơi bằng thông tin ứng dụng Firebase của bạn .

Thao tác sau sẽ kích hoạt luồng đăng nhập, tạo thông tin xác thực mới và đăng nhập người dùng:

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

Trước khi bắt đầu, hãy thiết lập Ứng dụng dành cho 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 nhà cung cấp đă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 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 luồng 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 về plugin để đảm bảo rằng cả SDK Facebook dành cho Android và iOS đều được khởi tạo chính xác. Sau khi hoàn tất, hãy kích hoạt luồng đăng nhập, tạo thông tin xác thực Facebook và đăng nhập 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ý luồng 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 mọi phạm vi quyền bổ sung mà bạn muốn nhận đượ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 dưới dạng 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+

Trước khi bạn bắt đầu, hãy định cấu hình Đăng nhập bằng Applebật Apple làm nhà cung cấp dịch vụ đăng nhập .

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

Android

Trước khi bạn bắt đầu, hãy định cấu hình Đăng nhập bằng Applebật Apple làm nhà cung cấp dịch vụ đăng nhập .

Web

Trước khi bạn bắt đầu, hãy định cấu hình Đăng nhập bằng Applebật Apple làm nhà cung cấp dịch vụ đăng nhập .

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

Thu hồi mã thông báo xác thực của Apple

Đăng nhập Apple trên nền tảng Apple trả về mã ủy quyền có thể được sử dụng để thu hồi mã thông báo xác thực Apple bằng cách sử dụng API revokeTokenWithAuthorizationCode() .

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

Microsoft

iOS+

Trước khi bạn bắt đầu định cấu hình Đăng nhập Microsoft cho iOS và thêm lược đồ URL tùy chỉnh vào Runner (bước 1) của bạn .

Android

Trước khi bạn bắt đầu định cấu hình Đăng nhập Microsoft cho Android .

Đừng quên thêm dấu vân tay SHA-1 của ứng dụng của bạn.

Web

Trước khi bạn bắt đầu định cấu hình Đăng nhập Microsoft cho 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

Đảm bảo nhà cung cấp đă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. Đảm bảo URI chuyển hướng Firebase OAuth của bạn (ví dụ: my-app-12345.firebaseapp.com/__/auth/handler) được đặt làm URL gọi lại Ủy quyền trong trang cài đặt ứng dụng của bạn trên cấu hình ứng dụng Twitter của bạn.

Bạn cũng có thể cần yêu cầu quyền truy cập API nâng cao tùy thuộc vào ứng dụng của bạn .

iOS+

Bạn cần định cấu hình lược đồ URL tùy chỉnh của mình như được mô tả trong hướng dẫn iOS bước 1 .

Android

Nếu bạn chưa chỉ định dấu vân tay SHA-1 cho ứng dụng của mình, hãy làm như vậy từ trang Cài đặt của bảng điều khiển Firebase. Tham khảo Xác thực ứng dụng khách của bạn để biết chi tiết về cách lấy dấu vân tay SHA-1 của ứng dụng.

Web

Sáng tạo.

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

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

iOS+ và Android

Đối với nền tảng gốc, bạn cần thêm google-services.jsonGoogleService-Info.plist .

Đối với iOS, hãy thêm lược đồ URL tùy chỉnh như được mô tả trong hướng dẫn iOS bước 1.

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

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

Web

Trên web, SDK GitHub 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 dưới dạng 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);
}

Yahoo

Đảm bảo nhà cung cấp dịch vụ đăng nhập "Yahoo" được bật trên Bảng điều khiển Firebase với bộ Khóa API và Bí mật API. Ngoài ra, hãy đảm bảo URI chuyển hướng Firebase OAuth của bạn (ví dụ: my-app-12345.firebaseapp.com/__/auth/handler) được đặt làm URI chuyển hướng trong cấu hình Mạng nhà phát triển Yahoo của ứng dụng của bạn.

iOS+

Trước khi bạn bắt đầu, hãy định cấu hình Đăng nhập Yahoo dành cho iOS và thêm lược đồ URL tùy chỉnh vào Runner (bước 1) của bạn .

Android

Trước khi bạn bắt đầu, hãy định cấu hình Đăng nhập Yahoo cho Android .

Đừng quên thêm dấu vân tay SHA-1 của ứng dụng của bạn.

Web

Sáng tạo.

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

Sử dụng mã thông báo truy cập OAuth

Bằng cách sử dụng AuthProvider, bạn có thể truy xuất mã thông báo truy cập được liên kết với nhà cung cấp bằng cách thực hiện yêu cầu sau.

final appleProvider = AppleAuthProvider();

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

// You can send requests with the `accessToken`

Liên kết nhà cung cấp xác thực

Nếu bạn muốn liên kết một nhà cung cấp với một người dùng hiện tại, bạn có thể sử dụng phương pháp sau: ```dart chờ FirebaseAuth.instance.signInAnonymous();

appleProvider cuối cùng = AppleAuthProvider();

if (kIsWeb) { đang chờ FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);

// Bạn cũng có thể sử dụng linkWithRedirect } else { chờ FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// Người dùng ẩn danh của bạn hiện đã được nâng cấp để có thể kết nối với Sign In With Apple ```

Xác thực lại với nhà cung cấp

Mẫu tương tự có thể được sử dụng với reauthenticateWithProvider để truy xuất thông tin xác thực mới cho các hoạt động nhạy cảm yêu cầu đăng nhập gần đây.

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