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

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

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

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

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

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

    pod 'Firebase/Auth'
    
  3. در فایربیس کنسول ، باز کردن بخش تایید.
  4. بر روی ثبت نام در تب روش، فعال کردن ارائه دهنده توییتر.
  5. اضافه کردن کلید API و مخفی API از کنسول توسعه است که ارائه دهنده به پیکربندی ارائه دهنده:
    1. ثبت نام برنامه خود را به عنوان یک برنامه توسعه در توییتر و OAuth تأیید کلید API و API های مخفی برنامه شما هستند.
    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 ارائه دهنده twitter.com.

    سریع

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

    هدف-ج

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

    سریع

        provider.customParameters = [
          "lang": "fr"
          ]
        

    هدف-ج

        [provider setCustomParameters:@{@"lang": @"fr"}];
        

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

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

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

    سریع

        provider.getCredentialWith(nil) { credential, error in
          if error != nil {
            // Handle error.
          }
          if credential != nil {
            Auth.auth().signIn(with: credential) { authResult, error in
              if error != nil {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
              // Twitter OAuth access token can also be retrieved by:
              // authResult.credential.accessToken
              // Twitter OAuth ID token can be retrieved by calling:
              // authResult.credential.idToken
              // Twitter OAuth secret can be retrieved by calling:
              // authResult.credential.secret
            }
          }
        }
        

    هدف-ج

        [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.
              // Twitter OAuth access token can also be retrieved by:
              // authResult.credential.accessToken
              // Twitter OAuth ID token can be retrieved by calling:
              // authResult.credential.idToken
              // Twitter OAuth secret can be retrieved by calling:
              // authResult.credential.secret
            }];
          }
        }];
        

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

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

    https://api.twitter.com/labs/1/users?usernames=TwitterDev
    
  6. در حالی که مثالهای بالا بر جریان ورود به سیستم تمرکز می کنند ، شما همچنین می توانید یک ارائه دهنده توییتر را به یک کاربر موجود پیوند دهید. به عنوان مثال ، می توانید چندین ارائه دهنده را به یک کاربر پیوند دهید و به آنها اجازه دهید با هر کدام وارد سیستم شوند.

    سریع

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

    هدف-ج

        [[FIRAuth auth].currentUser
            linkWithCredential:credential
                    completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // Twitter credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // Twitter OAuth access token is can also be retrieved by:
          // authResult.credential.accessToken
          // Twitter OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
          // Twitter OAuth secret can be retrieved by calling:
          // authResult.credential.secret
        }];
        
  7. همین الگو را می توان با استفاده 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
          // Twitter OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
          // Twitter OAuth secret can be retrieved by calling:
          // authResult.credential.secret
        }
        

    هدف-ج

        [[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
          // Twitter OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
          // Twitter OAuth secret can be retrieved by calling:
          // authResult.credential.secret
        }];
        

مراحل بعدی

پس از ورود کاربر برای اولین بار ، یک حساب کاربری جدید ایجاد می شود و به اعتبارنامه - یعنی نام کاربری و گذرواژه ، شماره تلفن یا اطلاعات ارائه دهنده تأیید - که کاربر با آن وارد شده است پیوند داده می شود. این حساب جدید به عنوان بخشی از پروژه 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;
}

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