ตรวจสอบสิทธิ์โดยใช้ Yahoo และ Unity

คุณอนุญาตให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase โดยใช้ผู้ให้บริการ OAuth เช่น Yahoo ได้ โดยผสานการเข้าสู่ระบบ OAuth ทั่วไปบนเว็บในแอปของคุณโดยใช้ Firebase SDK เพื่อดำเนินการขั้นตอนการลงชื่อเข้าใช้ตั้งแต่ต้นจนจบ เนื่องจากโฟลว์นี้ต้องใช้ Firebase SDK ที่ทำงานบนโทรศัพท์ จึงได้รับการสนับสนุนบนแพลตฟอร์ม Android และ Apple เท่านั้น

ก่อนจะเริ่ม

ก่อนที่คุณจะสามารถใช้ การตรวจสอบสิทธิ์ Firebase คุณจะต้อง:

  • ลงทะเบียนโครงการ Unity ของคุณและกำหนดค่าให้ใช้ Firebase

    • หากโปรเจ็กต์ Unity ของคุณใช้ Firebase อยู่แล้ว แสดงว่าได้ลงทะเบียนและกำหนดค่าสำหรับ Firebase แล้ว

    • หากคุณไม่ได้มีโครงการเอกภาพคุณสามารถดาวน์โหลด แอปพลิเคตัวอย่าง

  • เพิ่ม Firebase สามัคคี SDK (เฉพาะ FirebaseAuth.unitypackage ) ให้กับโครงการความสามัคคีของคุณ

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

เข้า Firebase.Auth.FirebaseAuth ระดับ

FirebaseAuth ชั้นเป็นประตูสำหรับทุกการเรียก API มันเป็นเข้าถึงได้ผ่าน FirebaseAuth.DefaultInstance
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

จัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK

หากต้องการจัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK ให้ทำตามขั้นตอนเหล่านี้:

  1. สร้างตัวอย่างของหนึ่ง FederatedOAuthProviderData กำหนดค่าด้วยที่เหมาะสมให้บริการ ID สำหรับ Yahoo

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    providerData.ProviderId = Firebase.Auth.YahooAuthProvider.ProviderId;
    
  2. บังคับ: ระบุพารามิเตอร์ที่กำหนดเอง OAuth เพิ่มเติมที่คุณต้องการที่จะส่งคำขอของ OAuth

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Prompt user to re-authenticate to Yahoo.
    providerData.CustomParameters.Add("prompt", "login");
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    

    สำหรับการสนับสนุนพารามิเตอร์ Yahoo, ดู เอกสาร Yahoo OAuth โปรดทราบว่าคุณจะไม่สามารถส่งผ่านพารามิเตอร์ Firebase จำเป็นกับ custom_parameters() พารามิเตอร์เหล่านี้เป็น client_id, redirect_uri, response_type ขอบเขตและรัฐ

  3. บังคับ: ระบุเพิ่มเติม OAuth 2.0 ขอบเขตเกิน profile และ email ที่คุณต้องการร้องขอจากผู้ให้บริการการตรวจสอบ หากใบสมัครของคุณต้องการการเข้าถึงข้อมูลส่วนตัวของผู้ใช้จาก Yahoo API คุณจะต้องร้องขอสิทธิ์ในการ Yahoo APIs ภายใต้สิทธิ์ API ในการพัฒนาคอนโซล Yahoo ขอบเขต OAuth ที่ขอต้องตรงกันทุกประการกับขอบเขตที่กำหนดค่าไว้ล่วงหน้าในการอนุญาต API ของแอป ยกตัวอย่างเช่นการเข้าถึงถ้าอ่าน / เขียนมีการร้องขอไปยังรายชื่อผู้ใช้และกำหนดไว้ล่วงหน้าในสิทธิ์ API ของแอป sdct-w จะต้องมีการส่งผ่านไปแทนขอบเขต OAuth อ่านได้อย่างเดียว sdct-r มิฉะนั้น โฟลว์จะล้มเหลวและจะแสดงข้อผิดพลาดให้ผู้ใช้เห็น

    providerData.Scopes = new List<string>();
    
    // Request access to Yahoo Mail API.
    providerData.Scopes.Add("mail-r");
    // This must be preconfigured in the app's API permissions.
    providerData.Scopes.Add("sdct-w");
    

    ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ เอกสาร Yahoo ขอบเขต

  4. เมื่อข้อมูลผู้ให้บริการของคุณได้รับการกำหนดค่าแล้ว ให้ใช้เพื่อสร้าง FederatedOAuthProvider

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
        new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. ตรวจสอบสิทธิ์กับ Firebase โดยใช้วัตถุผู้ให้บริการตรวจสอบสิทธิ์ โปรดทราบว่าการดำเนินการนี้จะควบคุม UI ของคุณโดยเปิดมุมมองเว็บที่ผู้ใช้สามารถป้อนข้อมูลรับรองได้ไม่เหมือนกับการดำเนินการ FirebaseAuth อื่นๆ

    การเริ่มต้นการเข้าสู่ระบบการไหลโทร SignInWithProviderAsync :

<<../_includes/_sign_in_with_provider_unity.md>>>

  1. ในขณะที่ตัวอย่างข้างต้นมุ่งเน้นไปที่การลงชื่อเข้าใช้กระแสคุณยังมีความสามารถในการเชื่อมโยงผู้ให้บริการ Yahoo ไปยังผู้ใช้ที่มีอยู่โดยใช้ LinkWithProviderAsync ตัวอย่างเช่น คุณสามารถเชื่อมโยงผู้ให้บริการหลายรายกับผู้ใช้รายเดียวกันเพื่อให้ลงชื่อเข้าใช้ได้

    user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("LinkWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("LinkWithProviderAsync encountered an error: "
              + task.Exception);
            return;
        }
    
        Firebase.Auth.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User linked successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  2. รูปแบบเดียวกันสามารถใช้กับ ReauthenticateWithProviderAsync ซึ่งสามารถใช้ในการดึงข้อมูลประจำตัวที่สดใหม่สำหรับการดำเนินงานที่สำคัญที่จำเป็นต้องเข้าสู่ระบบล่าสุด

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    

ขั้นตอนถัดไป

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

  • ในปพลิเคชันของคุณคุณจะได้รับข้อมูลรายละเอียดของผู้ใช้พื้นฐานจาก Firebase.Auth.FirebaseUser วัตถุ:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • ในฐานข้อมูล Firebase เรียลไทม์และการจัดเก็บเมฆ กฎการรักษาความปลอดภัย , คุณจะได้รับการลงนามใน ID ผู้ใช้ของผู้ใช้ที่ไม่ซ้ำกันจาก auth ตัวแปรและใช้ในการควบคุมสิ่งที่ข้อมูลที่เข้าถึงผู้ใช้สามารถ

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

ออกจากระบบผู้ใช้โทร SignOut() :

auth.SignOut();