با استفاده از GitHub در Android احراز هویت شوید

با ادغام حسابهای GitHub خود با استفاده از Firebase SDK می توانید به کاربران خود اجازه دهید با Firebase احراز هویت کنند تا جریان ورود به سیستم را از پایان به پایان انجام دهند.

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

برای ورود کاربران با استفاده از حساب های GitHub ، ابتدا باید GitHub را به عنوان ارائه دهنده ورود به سیستم پروژه Firebase خود فعال کنید:

  1. اگر شما در حال حاضر، اضافه فایربیس به پروژه آندروید خود را .

  2. در فایربیس کنسول ، باز کردن بخش تایید.
  3. بر روی ثبت نام در تب روش، فعال کردن ارائه دهنده گیتهاب.
  4. اضافه کردن شناسه سرویسگیرنده و مشتری راز از کنسول توسعه است که ارائه دهنده به پیکربندی ارائه دهنده:
    1. ثبت نام برنامه خود را به عنوان یک برنامه توسعه در GitHub و برنامه خود را از OAuth 2.0 شناسه کلاینت و مشتری راز.
    2. اطمینان حاصل کنید که خود را فایربیس OAuth تأیید تغییر مسیر URI (به عنوان مثال my-app-12345.firebaseapp.com/__/auth/handler ) به عنوان URL پاسخ به تماس مجوز خود را در صفحه تنظیمات برنامه خود را بر روی خود را تنظیم پیکربندی گیتهاب برنامه .
  5. ذخیره کلیک کنید.
  6. با استفاده از فایربیس آندروید BOM ، اعلام وابستگی برای کتابخانه فایربیس احراز هویت آندروید در ماژول خود را (در سطح برنامه) فایل Gradle (معمولا app/build.gradle ).

    جاوا

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.1')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    }
    

    با استفاده از فایربیس آندروید BOM ، برنامه شما همیشه نسخه های سازگار با کتابخانه فایربیس آندروید استفاده خواهد کرد.

    (جایگزین) اعلام فایربیس وابستگی کتابخانه بدون استفاده از BOM

    در صورت عدم استفاده از Firebase BoM ، باید هر نسخه کتابخانه Firebase را در خط وابستگی مشخص کنید.

    توجه داشته باشید که در صورت استفاده از کتابخانه فایربیس های متعدد در برنامه شما، ما به شدت توصیه با استفاده از BOM به مدیریت نسخه های کتابخانه، که تضمین می کند که تمام نسخه های سازگار است.

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:21.0.1'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.1')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
    

    با استفاده از فایربیس آندروید BOM ، برنامه شما همیشه نسخه های سازگار با کتابخانه فایربیس آندروید استفاده خواهد کرد.

    (جایگزین) اعلام فایربیس وابستگی کتابخانه بدون استفاده از BOM

    در صورت عدم استفاده از Firebase BoM ، باید هر نسخه کتابخانه Firebase را در خط وابستگی مشخص کنید.

    توجه داشته باشید که در صورت استفاده از کتابخانه فایربیس های متعدد در برنامه شما، ما به شدت توصیه با استفاده از BOM به مدیریت نسخه های کتابخانه، که تضمین می کند که تمام نسخه های سازگار است.

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:21.0.1'
    }
    

  7. اگر هنوز برنامه خود را SHA-1 اثر انگشت مشخص نشده است، انجام این کار از صفحه تنظیمات از کنسول فایربیس. برای اشاره تأیید اعتبار مشتری خود را برای جزئیات بیشتر در مورد چگونگی گرفتن برنامه خود را SHA-1 اثر انگشت.

جریان ورود به سیستم را با Firebase SDK مدیریت کنید

اگر در حال ساخت یک برنامه Android هستید ، ساده ترین راه برای احراز هویت کاربران خود با Firebase با استفاده از حساب های GitHub آنها این است که کل جریان ورود به سیستم را با Firebase Android SDK مدیریت کنید.

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

  1. ساخت یک نمونه از یک OAuthProvider با استفاده از سازنده آن با ID ارائه دهنده github.com

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("github.com");
    
  2. اختیاری: مشخص پارامترهای OAuth حفظ سفارشی اضافی که شما می خواهید برای ارسال با درخواست OAuth تأیید.

    // Target specific email with login hint.
    provider.addCustomParameter("login", "your-email@gmail.com");
    

    برای پارامترهای گیتهاب پشتیبانی می کند، را ببینید مستندات گیتهاب OAuth تأیید . توجه داشته باشید که شما می توانید پارامترهای فایربیس مورد نیاز با عبور نمی setCustomParameters() . این پارامترها سرویس گیرنده، response_type، redirect_uri، دولت، دامنه و response_mode.

  3. اختیاری: مشخص OAuth حفظ 2.0 حوزه فراتر از مشخصات اساسی است که شما به درخواست از ارائه دهنده احراز هویت می خواهید. اگر برنامه شما نیاز به دسترسی به اطلاعات شخصی کاربر را از GitHub رابط های برنامه کاربردی، شما را به مجوز درخواست برای دسترسی به گیتهاب رابط های برنامه کاربردی تحت API مجوزهای در کنسول برنامهنویس گیتهاب نیاز دارند. محدوده های درخواستی OAuth باید با مجوزهای از پیش تنظیم شده در مجوزهای API برنامه مطابقت داشته باشد.

    // Request read access to a user's email addresses.
    // This must be preconfigured in the app's API permissions.
    List<String> scopes =
        new ArrayList<String>() {
          {
            add("user:email");
          }
        };
    provider.setScopes(scopes);
    
  4. با استفاده از شیء ارائه دهنده OAuth با Firebase احراز هویت کنید. توجه داشته باشید که بر خلاف دیگر عملیات FirebaseAuth، این کنترل UI خود را با ظاهر یک را کروم Tab سفارشی . در نتیجه، انجام فعالیت های خود را در مرجع نه OnSuccessListener و OnFailureListener که شما ضمیمه به عنوان آنها بلافاصله جدا زمانی که عملیات شروع می شود از UI.

    ابتدا باید بررسی کنید که آیا قبلاً پاسخی دریافت کرده اید یا خیر. ورود به سیستم از طریق این روش Activity شما را در پس زمینه قرار می دهد ، به این معنی که در جریان ورود به سیستم توسط سیستم قابل بازیابی است. برای اطمینان از این که در این صورت کاربر را مجبور به تلاش مجدد نمی کند ، باید بررسی کنید که آیا نتیجه ای در حال حاضر وجود دارد یا خیر.

    برای بررسی اینکه آیا نتیجه انتظار وجود دارد، پاسخ getPendingAuthResult :

    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can also be retrieved:
                  // authResult.getCredential().getAccessToken().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
    

    برای شروع ثبت نام در جریان، پاسخ startActivityForSignInWithProvider :

    firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    پس از اتمام موفقیت آمیز، دسترسی OAuth رمز در ارتباط با ارائه دهنده را می توان بازیابی از OAuthCredential شیء را بازگرداند.

    با استفاده از نشانه دسترسی OAuth، شما می توانید پاسخ API گیتهاب .

    به عنوان مثال، برای به دست آوردن اطلاعات نمایه، شما می توانید API REST تماس بگیرید، عبور از رمز دسترسی در Authorization هدر:

  5. در حالی که مثال بالا در تمرکز جریانهای ورود به سیستم، شما همچنین توانایی برای ارتباط ارائه GitHub برای یک کاربر موجود با استفاده از اند startActivityForLinkWithProvider . به عنوان مثال ، می توانید چندین ارائه دهنده را به یک کاربر پیوند دهید و به آنها اجازه دهید با هر کدام وارد سیستم شوند.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // GitHub credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
    
  6. همین الگو را می توان با استفاده startActivityForReauthenticateWithProvider است که می تواند مورد استفاده قرار گیرد برای بازیابی اعتبار تازه برای عملیات حساس که نیاز به ورود به آخرین.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

مراحل بعدی

پس از ورود کاربر برای اولین بار ، یک حساب کاربری جدید ایجاد می شود و به اعتبارنامه - یعنی نام کاربری و گذرواژه ، شماره تلفن یا اطلاعات ارائه دهنده تأیید - که کاربر با آن وارد شده است پیوند داده می شود. این حساب جدید به عنوان بخشی از پروژه Firebase شما ذخیره می شود و می تواند بدون در نظر گرفتن نحوه ورود کاربر در هر برنامه ای در پروژه شما ، کاربر را شناسایی کند.

  • در برنامه های خود را، شما می توانید اطلاعات نمایه کاربر از دریافت FirebaseUser شی. مشاهده مدیریت کاربران .

  • در خود پایگاه فایربیس بیدرنگ و ابر ذخیره سازی قوانین امنیتی ، شما می توانید دریافت امضا در شناسه کاربری منحصر به فرد کاربر را از auth متغیر، و استفاده از آن برای کنترل آنچه داده دسترسی کاربر می تواند.

شما می توانید اجازه به کاربران برای ورود به سیستم برنامه خود را با استفاده از ارائه دهندگان تأیید هویت چندگانه توسط ارتباط تایید اعتبار ارائه دهنده به یک حساب کاربری موجود.

برای خروج از سیستم یک کاربر، پاسخ signOut :

جاوا

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()