ข้อมูลระบุตัวตนแบบรวมศูนย์ & การลงชื่อเข้าใช้โซเชียล

การรับรองความถูกต้องทางสังคมเป็นขั้นตอนการรับรองความถูกต้องแบบหลายขั้นตอน ซึ่งช่วยให้คุณสามารถลงชื่อผู้ใช้เข้าสู่บัญชีหรือเชื่อมโยงกับบัญชีที่มีอยู่ได้

ทั้งแพลตฟอร์มดั้งเดิมและการสนับสนุนทางเว็บที่สร้างข้อมูลประจำตัวซึ่งสามารถส่งผ่านไปยังเมธอด signInWithCredential หรือ linkWithCredential หรือบนแพลตฟอร์มเว็บ คุณสามารถทริกเกอร์กระบวนการตรวจสอบสิทธิ์ผ่านป๊อปอัปหรือการเปลี่ยนเส้นทางได้

Google

การกำหนดค่าส่วนใหญ่ได้รับการตั้งค่าไว้แล้วเมื่อใช้ Google Sign-In กับ Firebase อย่างไรก็ตาม คุณต้องแน่ใจว่าคีย์ SHA1 ของเครื่องได้รับการกำหนดค่าเพื่อใช้กับ Android คุณสามารถดูวิธีสร้างคีย์ได้ใน เอกสารประกอบการตรวจสอบสิทธิ์

ตรวจสอบให้แน่ใจว่าผู้ให้บริการลงชื่อเข้าใช้ "Google" เปิดอยู่บน คอนโซล Firebase

หากผู้ใช้ของคุณลงชื่อเข้าใช้ด้วย Google หลังจากลงทะเบียนบัญชีด้วยตนเองแล้ว ผู้ให้บริการตรวจสอบสิทธิ์จะเปลี่ยนเป็น Google โดยอัตโนมัติ เนื่องจากแนวคิด Firebase Authentications ของผู้ให้บริการที่เชื่อถือได้ คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ ได้ที่นี่

iOS+ และ Android

บนแพลตฟอร์มดั้งเดิม จำเป็นต้องมีไลบรารีของบุคคลที่สามเพื่อทริกเกอร์ขั้นตอนการตรวจสอบสิทธิ์

ติดตั้งปลั๊กอิน google_sign_in อย่างเป็นทางการ

เมื่อติดตั้งแล้ว ให้เริ่มขั้นตอนการลงชื่อเข้าใช้และสร้างข้อมูลรับรองใหม่:

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

เว็บ

บนเว็บ Firebase SDK ให้การสนับสนุนสำหรับการจัดการขั้นตอนการตรวจสอบสิทธิ์โดยอัตโนมัติโดยใช้โปรเจ็กต์ Firebase ของคุณ ตัวอย่างเช่น:

สร้างผู้ให้บริการรับรองความถูกต้องของ Google โดยระบุ ขอบเขตการอนุญาต เพิ่มเติมที่คุณต้องการได้รับจากผู้ใช้:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

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

ระบุข้อมูลรับรองให้กับเมธอด signInWithPopup การดำเนินการนี้จะทริกเกอร์หน้าต่างใหม่ปรากฏขึ้นเพื่อแจ้งให้ผู้ใช้ลงชื่อเข้าใช้โครงการของคุณ หรือคุณสามารถใช้ signInWithRedirect เพื่อเก็บกระบวนการตรวจสอบสิทธิ์ไว้ในหน้าต่างเดียวกันได้

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

คุณตรวจสอบสิทธิ์ผู้ใช้ในเกม Android ได้โดยใช้ Play Games Sign-In

หุ่นยนต์

ทำตามคำแนะนำสำหรับการตั้งค่า Google บน Android จากนั้นกำหนด ค่าบริการ Play Games ด้วยข้อมูลแอป Firebase ของคุณ

สิ่งต่อไปนี้จะทริกเกอร์ขั้นตอนการลงชื่อเข้าใช้ สร้างข้อมูลรับรองใหม่และลงชื่อเข้าใช้ผู้ใช้:

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 Developer ของคุณและทำตามขั้นตอนการตั้งค่าเพื่อเปิดใช้งานการเข้าสู่ระบบด้วย Facebook

ตรวจสอบให้แน่ใจว่าได้เปิดใช้งานผู้ให้บริการลงชื่อเข้าใช้ "Facebook" บน คอนโซล Firebase ด้วย ID แอพ Facebook และชุดความลับ

iOS+ และ Android

บนแพลตฟอร์มแบบเนทิฟ จำเป็นต้องมีไลบรารีของบริษัทอื่นเพื่อติดตั้ง Facebook SDK และทริกเกอร์โฟลว์การตรวจสอบสิทธิ์

ติดตั้งปลั๊กอิน flutter_facebook_auth

คุณจะต้องทำตามขั้นตอนในเอกสารประกอบปลั๊กอินเพื่อให้แน่ใจว่าทั้ง Android และ iOS Facebook SDK ได้รับการเริ่มต้นอย่างถูกต้อง เมื่อเสร็จแล้ว ให้เริ่มขั้นตอนการลงชื่อเข้าใช้ สร้างข้อมูลรับรอง Facebook และลงชื่อเข้าใช้ผู้ใช้:

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

เว็บ

บนเว็บ Firebase SDK ให้การสนับสนุนสำหรับการจัดการขั้นตอนการตรวจสอบสิทธิ์โดยอัตโนมัติโดยใช้รายละเอียดแอปพลิเคชัน Facebook ที่ให้ไว้ในคอนโซล Firebase ตัวอย่างเช่น:

สร้างผู้ให้บริการ Facebook โดยระบุ ขอบเขตการอนุญาต เพิ่มเติมที่คุณต้องการได้รับจากผู้ใช้

ตรวจสอบให้แน่ใจว่า URI การเปลี่ยนเส้นทาง OAuth จากคอนโซล Firebase ถูกเพิ่มเป็น URI การเปลี่ยนเส้นทาง OAuth ที่ถูกต้องในแอพ Facebook ของคุณ

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

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

ระบุข้อมูลรับรองให้กับเมธอด signInWithPopup สิ่งนี้จะทริกเกอร์หน้าต่างใหม่ปรากฏขึ้นเพื่อแจ้งให้ผู้ใช้ลงชื่อเข้าใช้แอปพลิเคชัน Facebook ของคุณ:

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 และ เปิดใช้งาน Apple เป็นผู้ให้บริการลงชื่อเข้าใช้

จากนั้น ตรวจสอบให้แน่ใจว่าแอพ Runner ของคุณมีความสามารถ "ลงชื่อเข้าใช้ด้วย Apple"

หุ่นยนต์

ก่อนที่คุณจะเริ่มต้น ให้กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple และ เปิดใช้งาน Apple เป็นผู้ให้บริการลงชื่อเข้าใช้

เว็บ

ก่อนที่คุณจะเริ่มต้น ให้กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple และ เปิดใช้งาน Apple เป็นผู้ให้บริการลงชื่อเข้าใช้

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

เพิกถอนโทเค็นการรับรองความถูกต้องของ Apple

การลงชื่อเข้าใช้ของ Apple บนแพลตฟอร์มของ Apple จะส่งคืนรหัสอนุญาตที่สามารถใช้เพื่อเพิกถอนโทเค็นการรับรองความถูกต้องของ Apple ได้โดยใช้ 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!);
}

ไมโครซอฟต์

ไอโอเอส+

ก่อนที่คุณจะเริ่ม กำหนดค่าการเข้าสู่ระบบ Microsoft สำหรับ iOS และเพิ่ม โครงร่าง URL ที่กำหนดเองให้กับ Runner ของคุณ (ขั้นตอนที่ 1)

หุ่นยนต์

ก่อนที่คุณจะเริ่ม กำหนดค่าการเข้าสู่ระบบ Microsoft สำหรับ Android

อย่าลืมเพิ่มลายนิ้วมือ SHA-1 ของแอปของคุณ

เว็บ

ก่อนที่คุณจะเริ่ม กำหนดค่าการเข้าสู่ระบบ Microsoft สำหรับเว็บ

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" เปิดใช้งานบน คอนโซล Firebase ด้วยคีย์ API และชุดความลับ API ตรวจสอบให้แน่ใจว่า URI การเปลี่ยนเส้นทาง Firebase OAuth ของคุณ (เช่น my-app-12345.firebaseapp.com/__/auth/handler) ได้รับการตั้งค่าเป็น URL โทรกลับการอนุญาตในหน้าการตั้งค่าของแอปใน การกำหนดค่าของแอป Twitter

คุณอาจต้องขอ การเข้าถึง API ระดับสูงโดยขึ้นอยู่กับแอปของคุณ

ไอโอเอส+

คุณต้องกำหนดค่า Scheme URL ที่กำหนดเองตาม ที่อธิบายไว้ในคู่มือ iOS ขั้นตอนที่ 1

หุ่นยนต์

หากคุณยังไม่ได้ระบุลายนิ้วมือ SHA-1 ของแอป ให้ดำเนินการจาก หน้าการตั้งค่า ของคอนโซล Firebase โปรดดู การตรวจสอบสิทธิ์ไคลเอ็นต์ของคุณ สำหรับรายละเอียดเกี่ยวกับวิธีรับลายนิ้วมือ SHA-1 ของแอปของคุณ

เว็บ

ทำงานนอกกรอบ

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

ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าแอป OAuth จาก การตั้งค่านักพัฒนา GitHub ของคุณ และเปิดใช้งานผู้ให้บริการลงชื่อเข้าใช้ "GitHub" บน คอนโซล Firebase ด้วยรหัสไคลเอ็นต์และข้อมูลลับที่ได้รับการตั้งค่าไว้ โดยมีการตั้งค่า URL โทรกลับในแอป GitHub

iOS+ และ Android

สำหรับแพลตฟอร์มเนทีฟ คุณต้องเพิ่ม google-services.json และ GoogleService-Info.plist

สำหรับ iOS ให้เพิ่มรูปแบบ URL ที่กำหนดเองตามที่ อธิบายไว้ในคำแนะนำ iOS ขั้นตอนที่ 1

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

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

เว็บ

บนเว็บ GitHub SDK ให้การสนับสนุนสำหรับการจัดการโฟลว์การตรวจสอบสิทธิ์โดยอัตโนมัติโดยใช้รายละเอียดแอปพลิเคชัน GitHub ที่ให้ไว้ในคอนโซล Firebase ตรวจสอบให้แน่ใจว่า URL เรียกกลับในคอนโซล Firebase ถูกเพิ่มเป็น URL เรียกกลับในแอปพลิเคชัน GitHub ของคุณบนคอนโซลนักพัฒนาซอฟต์แวร์

ตัวอย่างเช่น:

สร้างผู้ให้บริการ GitHub และระบุข้อมูลประจำตัวให้กับเมธอด signInWithPopup สิ่งนี้จะทริกเกอร์หน้าต่างใหม่ปรากฏขึ้นเพื่อแจ้งให้ผู้ใช้ลงชื่อเข้าใช้แอปพลิเคชัน 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);
}

ยาฮู

ตรวจสอบให้แน่ใจว่าผู้ให้บริการลงชื่อเข้าใช้ "Yahoo" เปิดใช้งานบน คอนโซล Firebase ด้วยคีย์ API และชุดความลับ API ตรวจสอบให้แน่ใจว่า URI การเปลี่ยนเส้นทาง Firebase OAuth ของคุณ (เช่น my-app-12345.firebaseapp.com/__/auth/handler) ได้รับการตั้งค่าเป็น URI การเปลี่ยนเส้นทางในการกำหนดค่า Yahoo Developer Network ของแอปของคุณ

ไอโอเอส+

ก่อนที่คุณจะเริ่มต้น ให้กำหนดค่าการเข้าสู่ระบบ Yahoo สำหรับ iOS และเพิ่ม รูปแบบ URL ที่กำหนดเองให้กับ Runner ของคุณ (ขั้นตอนที่ 1)

หุ่นยนต์

ก่อนที่คุณจะเริ่มต้น ให้กำหนดค่าการเข้าสู่ระบบ Yahoo สำหรับ Android

อย่าลืมเพิ่มลายนิ้วมือ SHA-1 ของแอปของคุณ

เว็บ

ทำงานนอกกรอบ

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

การใช้โทเค็นการเข้าถึง OAuth

เมื่อใช้ AuthProvider คุณสามารถดึงโทเค็นการเข้าถึงที่เชื่อมโยงกับผู้ให้บริการได้โดยการร้องขอต่อไปนี้

final appleProvider = AppleAuthProvider();

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

// You can send requests with the `accessToken`

การเชื่อมโยงผู้ให้บริการการรับรองความถูกต้อง

หากคุณต้องการเชื่อมโยงผู้ให้บริการกับผู้ใช้ปัจจุบัน คุณสามารถใช้วิธีการต่อไปนี้: ```dart await FirebaseAuth.instance.signInAnonymously();

appleProvider สุดท้าย = AppleAuthProvider();

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

// คุณยังสามารถใช้ linkWithRedirect } else { await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// ขณะนี้คุณเป็นผู้ใช้ที่ไม่ระบุชื่อได้รับการอัปเกรดเพื่อให้สามารถเชื่อมต่อกับการลงชื่อเข้าใช้ด้วย Apple ``` ได้

ตรวจสอบความถูกต้องอีกครั้งกับผู้ให้บริการ

รูปแบบเดียวกันนี้สามารถใช้ได้กับ reauthenticateWithProvider ซึ่งสามารถใช้เพื่อดึงข้อมูลประจำตัวใหม่สำหรับการดำเนินการที่มีความละเอียดอ่อนซึ่งจำเป็นต้องเข้าสู่ระบบครั้งล่าสุด

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