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

با یکپارچه سازی OAuth عمومی در برنامه خود با استفاده از Firebase SDK ، می توانید به کاربران خود اجازه دهید با استفاده از ارائه دهندگان OAuth مانند GitHub با Firebase احراز هویت کنند تا جریان ورود به سیستم را به پایان برسانید.

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

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

  1. اضافه کردن فایربیس به پروژه های iOS خود را .

  2. شامل غلاف زیر را در خود Podfile :

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

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

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

  1. طرح های URL سفارشی را به پروژه Xcode خود اضافه کنید:

    1. پیکربندی پروژه خود را باز کنید: روی نام پروژه در نمای چپ درخت دوبار کلیک کنید. برنامه خود را از بخش اهداف انتخاب کنید، سپس برگه اطلاعات را انتخاب کنید، و گسترش بخش انواع URL.
    2. کلیک بر روی دکمه و اضافه کردن یک طرح URL برای ID مشتری معکوس خود را. برای پیدا کردن این ارزش، باز کردن GoogleService-Info.plist فایل پیکربندی، و برای نگاه REVERSED_CLIENT_ID کلیدی است. کپی ارزش آن کلید، و آن را به طرح URL در صفحه تنظیمات جعبه بچسبانید. سایر فیلدها را خالی بگذارید.

      پس از تکمیل ، پیکربندی شما باید چیزی شبیه به موارد زیر (اما با مقادیر خاص برنامه شما) باشد:

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

    سریع

        var provider = OAuthProvider(providerID: "github.com")
        

    هدف-ج

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"github.com"];
        
  3. اختیاری: مشخص پارامترهای OAuth حفظ سفارشی اضافی که شما می خواهید برای ارسال با درخواست OAuth تأیید.

    سریع

        provider.customParameters = [
          "allow_signup": "false"
        ]
        

    هدف-ج

        [provider setCustomParameters:@{@"allow_signup": @"false"}];
        

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

  4. اختیاری: مشخص 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.
        provider.scopes = ["user:email"]
        

    هدف-ج

        // Request read access to a user's email addresses.
        // This must be preconfigured in the app's API permissions.
        [provider setScopes:@[@"user:email"]];
        

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

  5. اختیاری: اگر شما می خواهید برای سفارشی کردن راه ارائه برنامه خود را به SFSafariViewController یا UIWebView هنگام نمایش reCAPTCHA را به کاربر، ایجاد یک کلاس سفارشی است که مطابق با FIRAuthUIDelegate پروتکل، و آن را به getCredentialWithUIDelegate:completion: .

  6. با استفاده از شیء ارائه دهنده OAuth با Firebase احراز هویت کنید.

    سریع

        provider.getCredentialWith(nil) { credential, error in
          if error != nil {
            // Handle error.
          }
          if credential != nil {
            Auth().signIn(with: credential) { authResult, error in
              if error != nil {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
    
              guard let oauthCredential = authResult.credential as? OAuthCredential else { return }
              // GitHub OAuth access token can also be retrieved by:
              // oauthCredential.accessToken
              // GitHub OAuth ID token can be retrieved by calling:
              // oauthCredential.idToken
            }
          }
        }
        

    هدف-ج

        [provider getCredentialWithUIDelegate:nil
                                   completion:^(FIRAuthCredential *_Nullable credential,
                                                NSError *_Nullable error) {
          if (error) {
           // Handle error.
          }
          if (credential) {
            [[FIRAuth auth] signInWithCredential:credential
                                      completion:^(FIRAuthDataResult *_Nullable authResult,
                                                NSError *_Nullable error) {
              if (error) {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
    
              FIROAuthCredential *oauthCredential = (FIROAuthCredential *)authResult.credential;
              // GitHub OAuth access token can also be retrieved by:
              // oauthCredential.accessToken
              // GitHub OAuth ID token can be retrieved by calling:
              // oauthCredential.idToken
            }];
          }
        }];
        

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

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

    https://api.github.com/user
    
  7. در حالی که مثالهای بالا بر جریان ورود به سیستم تمرکز می کنند ، شما همچنین می توانید یک ارائه دهنده GitHub را به یک کاربر موجود پیوند دهید. به عنوان مثال ، می توانید چندین ارائه دهنده را به یک کاربر پیوند دهید و به آنها اجازه دهید با هر کدام وارد سیستم شوند.

    سریع

        Auth().currentUser.link(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // GitHub credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // GitHub OAuth access token can also be retrieved by:
          // authResult.credential.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
        }
        

    هدف-ج

        [[FIRAuth auth].currentUser
            linkWithCredential:credential
                    completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // GitHub credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // GitHub OAuth access token is can also be retrieved by:
          // authResult.credential.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
        }];
        
  8. همین الگو را می توان با استفاده reauthenticateWithCredential است که می تواند مورد استفاده قرار گیرد برای بازیابی اعتبار تازه برای عملیات حساس که نیاز به ورود به آخرین.

    سریع

        Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token is can also be retrieved by:
          // authResult.credential.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
        }
        

    هدف-ج

        [[FIRAuth auth].currentUser
            reauthenticateWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token is can also be retrieved by:
          // authResult.credential.accessToken
          // GitHub OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
        }];
        

مراحل بعدی

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

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

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

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

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

سریع

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

هدف-ج

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

همچنین ممکن است بخواهید برای همه دامنه خطاهای احراز هویت ، کد مدیریت خطا را اضافه کنید. مشاهده خطاها دسته .