اصالت‌سنجی بااستفاده از Yahoo و Unity

می‌توانید بااستفاده از ارائه‌دهندگان OAuth مانند Yahoo به کاربران اجازه دهید با Firebase اصالت‌سنجی کنند. برای این کار، «ورود به سیستم OAuth» عمومی مبتنی بر وب را بااستفاده از «کیت توسعه نرم‌افزار Firebase» در برنامه‌تان ادغام کنید تا جریان ورود به سیستم سرتاسری را انجام دهید. ازآنجایی‌که این جریان به استفاده از کیت‌های توسعه نرم‌افزار Firebase مبتنی بر تلفن نیاز دارد، فقط در پلاتفرم‌های Android و Apple پشتیبانی می‌شود.

قبل از شروع

پیش‌از اینکه بتوانید از Firebase Authentication استفاده کنید، باید:

  • پروژه Unity خود را ثبت کنید و آن را برای استفاده از Firebase پیکربندی کنید.

    • اگر پروژه Unity شما ازقبل از Firebase استفاده می‌کند، پس ازقبل برای Firebase ثبت و پیکربندی شده است.

    • اگر پروژه Unity ندارید، می‌توانید برنامه نمونه‌ای را بارگیری کنید.

  • Firebase Unity SDK (به‌طور دقیق، FirebaseAuth.unitypackage) را به پروژه Unity خود اضافه کنید.

توجه داشته باشید که افزودن Firebase به پروژه Unity شما شامل وظایفی در هر دو Firebase کنسول و پروژه Unity باز شما است (برای مثال، فایل‌های پیکربندی Firebase را از کنسول بارگیری می‌کنید، سپس آن‌ها را به پروژه Unity خود منتقل می‌کنید).

دسترسی به کلاس Firebase.Auth.FirebaseAuth

کلاس FirebaseAuth دروازه همه فراخوانی‌های API است. ازطریق FirebaseAuth.DefaultInstance قابل‌دسترسی است.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

مدیریت جریان ورود به سیستم با «کیت توسعه نرم‌افزار Firebase»

برای مدیریت جریان ورود به سیستم با «کیت توسعه نرم‌افزار Firebase»، این مراحل را دنبال کنید:

  1. نمونه‌ای از FederatedOAuthProviderData را که با شناسه ارائه‌دهنده مناسب برای 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، scope، و state.

  3. اختیاری: دامنه‌های OAuth 2.0 اضافی را فراتر از profile و email که می‌خواهید از ارائه‌دهنده اصالت‌سنجی درخواست کنید مشخص کنید. اگر برنامه شما نیاز به دسترسی به داده‌های خصوصی کاربر از Yahoo APIs دارد، باید در اجازه‌های API در کنسول توسعه‌دهندگان Yahoo، اجازه‌های Yahoo APIs را درخواست کنید. محدوده‌های 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 اصالت‌سنجی کنید. توجه داشته باشید که برخلاف دیگر عملیات FirebaseAuth، این عملیات با باز کردن نمای وبی که کاربر می‌تواند اطلاعات اعتباری‌اش را در آن وارد کند، کنترل واسط کاربری شما را دراختیار می‌گیرد.

    برای شروع جریان ورود به سیستم، SignInAndRetrieveDataWithCredentialAsync را فراخوانی کنید:

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

  1. اگرچه مثال‌های بالا بر جریان‌های ورود به سیستم تمرکز دارند، شما همچنین می‌توانید بااستفاده از LinkWithProviderAsync ارائه‌دهنده Yahoo را به کاربر موجود پیوند دهید. برای مثال، می‌توانید چندین ارائه‌دهنده را به یک کاربر پیوند دهید و به او اجازه دهید با هرکدام از آن‌ها وارد سیستم شود.

    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.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.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.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.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 Realtime Database و Cloud Storage قوانین امنیتی، می‌توانید شناسه کاربر یکتای کاربر واردشده به سیستم را از متغیر auth دریافت کنید و از آن برای کنترل داده‌هایی که کاربر می‌تواند به آن‌ها دسترسی داشته باشد استفاده کنید.

می‌توانید به کاربران اجازه دهید با پیوند دادن اطلاعات اعتباری ارائه‌دهنده اصالت‌سنجی به حساب کاربری موجود بااستفاده از چندین ارائه‌دهنده اصالت‌سنجی به سیستم برنامه‌تان وارد شوند.

برای خروج از سیستم کاربر، SignOut() را فراخوانی کنید:

auth.SignOut();