با استفاده از مایکروسافت و یونیتی احراز هویت

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

می‌توانید به کاربران خود اجازه دهید با Firebase با استفاده از ارائه‌دهندگان OAuth مانند Microsoft Azure Active Directory با یکپارچه‌سازی OAuth Login عمومی مبتنی بر وب در برنامه خود با استفاده از Firebase SDK برای انجام جریان ورود به سیستم از انتها به سیستم، احراز هویت کنند. از آنجایی که این جریان به استفاده از SDK های Firebase مبتنی بر تلفن نیاز دارد، فقط در پلتفرم های اندروید و اپل پشتیبانی می شود.

قبل از اینکه شروع کنی

قبل از اینکه بتوانید از Firebase Authentication استفاده کنید، باید:

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

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

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

  • 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 SDK، جریان ورود به سیستم را مدیریت کنید

برای مدیریت جریان ورود به سیستم با Firebase SDK، این مراحل را دنبال کنید:

  1. نمونه ای از FederatedOAuthProviderData پیکربندی شده با شناسه ارائه دهنده مناسب برای مایکروسافت بسازید.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    providerData.ProviderId = Firebase.Auth.MicrosoftAuthProvider.ProviderId;
    
  2. اختیاری : پارامترهای سفارشی OAuth اضافی را که می خواهید با درخواست OAuth ارسال کنید، مشخص کنید.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Prompt user to re-authenticate to Microsoft.
    providerData.CustomParameters.Add("prompt", "login");
    
    // Target specific email with login hint.
    providerData.CustomParameters.Add("login_hint",
        "user@firstadd.onmicrosoft.com");
    

    برای پارامترهایی که مایکروسافت پشتیبانی می کند، به مستندات Microsoft OAuth مراجعه کنید. توجه داشته باشید که نمی‌توانید پارامترهای مورد نیاز Firebase را با setCustomParameters() ارسال کنید. این پارامترها عبارتند از client_id , answer_type , redirect_uri , state , scope و answer_mode .

    برای اینکه فقط کاربران یک مستاجر Azure AD خاص بتوانند وارد برنامه شوند، می توان از نام دامنه دوستانه مستاجر Azure AD یا شناسه GUID مستاجر استفاده کرد. این را می توان با تعیین فیلد "مستاجر" در شیء پارامترهای سفارشی انجام داد.

    // Optional "tenant" parameter in case you are using an Azure AD tenant.
    // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com'
    // or "common" for tenant-independent tokens.
    // The default value is "common".
    providerData.CustomParameters.Add("tenant", "TENANT_ID");
    
  3. اختیاری : محدوده های OAuth 2.0 اضافی را فراتر از نمایه اصلی که می خواهید از ارائه دهنده احراز هویت درخواست کنید، مشخص کنید.

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("mail.read");
    providerData.Scopes.Add("calendars.read");
    

    برای کسب اطلاعات بیشتر، به مجوزها و اسناد رضایت Microsoft مراجعه کنید.

  4. هنگامی که داده های ارائه دهنده شما پیکربندی شد، از آن برای ایجاد یک FederatedOAuthProvider استفاده کنید.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. با استفاده از شی ارائه دهنده Auth با Firebase احراز هویت کنید. توجه داشته باشید که بر خلاف سایر عملیات FirebaseAuth، با نمایش یک نمای وب که در آن کاربر می‌تواند اعتبار خود را وارد کند، رابط کاربری شما را کنترل می‌کند.

    برای شروع جریان ورود به سیستم، با SignInWithProviderAsync تماس بگیرید:

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

    با استفاده از نشانه دسترسی OAuth، می‌توانید با Microsoft Graph API تماس بگیرید.

    برخلاف سایر ارائه دهندگان پشتیبانی شده توسط Firebase Auth، مایکروسافت URL عکس ارائه نمی کند و در عوض، داده های باینری برای عکس نمایه باید از طریق Microsoft Graph API درخواست شود.

  6. در حالی که مثال‌های بالا بر جریان‌های ورود تمرکز دارند، شما همچنین می‌توانید با استفاده از LinkWithProviderAsync یک ارائه‌دهنده Microsoft Azure Active Directory را به یک کاربر موجود پیوند دهید. برای مثال، می‌توانید چندین ارائه‌دهنده را به یک کاربر پیوند دهید و به آنها اجازه دهید با هر یک از آنها وارد سیستم شوند.

    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);
    });
    
  7. همین الگو را می توان با 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 Realtime Database و Cloud Storage، می‌توانید شناسه کاربری منحصر به فرد کاربر واردشده به سیستم را از متغیر auth دریافت کنید و از آن برای کنترل داده‌هایی که کاربر می‌تواند به آن دسترسی داشته باشد استفاده کنید.

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

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

auth.SignOut();