เอกลักษณ์ของสหพันธรัฐและการลงชื่อเข้าใช้โซเชียล

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

ทั้งแพลตฟอร์มดั้งเดิมและเว็บรองรับการสร้างข้อมูลรับรอง จากนั้นจึงส่งผ่านไปยัง 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 Games

คุณตรวจสอบสิทธิ์ผู้ใช้ในเกม Android ได้โดยใช้การลงชื่อเข้าใช้ Play Games

Android

ทำตามคำแนะนำสำหรับการตั้งค่า 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

ก่อนเริ่มต้น ให้ตั้งค่า แอพ Facebook Developer ของคุณและทำตามขั้นตอนการตั้งค่าเพื่อเปิดใช้งานการเข้าสู่ระบบ Facebook

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

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 โดยระบุ ขอบเขตการอนุญาต เพิ่มเติมที่คุณต้องการรับจากผู้ใช้

ตรวจสอบให้แน่ใจว่า OAuth เปลี่ยนเส้นทาง URI จากคอนโซล Firebase ถูกเพิ่มเป็น OAuth Redirect URI ที่ถูกต้องในแอป 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);
}

แอปเปิล

iOS+

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

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

Android

ก่อนที่คุณจะเริ่มต้น ให้ กำหนดค่าการลงชื่อเข้าใช้ด้วย 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);
  }
}

Microsoft

iOS+

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

Android

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

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

iOS+

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

Android

หากคุณยังไม่ได้ระบุลายนิ้วมือ 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 ตรวจสอบให้แน่ใจว่าได้เพิ่ม callback URL ในคอนโซล Firebase เป็น callback 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

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

iOS+

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

Android

ก่อนที่คุณจะเริ่มต้น ให้ กำหนดค่า Yahoo Login สำหรับ 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 ();

ถ้า (kIsWeb) { รอ FirebaseAuth.instance.currentUser?.linkWithPopup (appleProvider);

// คุณสามารถใช้ linkWithRedirect } อื่นได้ { 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