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 bạn đã đượ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 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ề các 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ý quy trình 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 đă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 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);
}

Google Play Trò chơi

Bạn có thể xác thực người dùng trong trò chơi Android của mình bằng Đăng nhập 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 quy trình đă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 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 đă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 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 với 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 các ứ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 với 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 với 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);
  }
}

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 Trình chạy của bạn (bước 1) .

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 vân tay SHA-1 cho ứ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 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. Đả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 của ứng dụng 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 tệp tham chiếu SHA-1 của ứng dụng, 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 khách hàng của bạn để biết chi tiết về cách lấy vân tay SHA-1 cho ứng dụng của bạn.

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

Đối với các 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 bước 1 của hướng dẫn iOS .

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

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

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 đă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 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 rằng 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 rằng 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.

iOS +

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

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 vân tay SHA-1 cho ứ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 với nhà cung cấp xác thực

Nếu bạn muốn liên kết nhà cung cấp với người dùng hiện tại, bạn có thể sử dụng phương pháp sau:

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

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

// Bạn cũng có thể sử dụng linkWithRedirect } else {await 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 Đăng nhập bằng 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 có thể được sử dụng để truy xuất thông tin đăng nhập 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