با استفاده از شماره تلفن و ++ C با Firebase احراز هویت کنید

برای ورود به سیستم کاربر با ارسال پیام کوتاه به تلفن کاربر ، می توانید از احراز هویت Firebase استفاده کنید. کاربر با استفاده از یک کد یکبار موجود در پیام کوتاه وارد سیستم می شود.

این سند نحوه پیاده سازی جریان ورود شماره تلفن با استفاده از Firebase SDK را توضیح می دهد.

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

  1. اضافه کردن فایربیس را به پروژه خود C ++ .
  2. اگر هنوز برنامه خود را متصل به پروژه فایربیس شما نیست، انجام این کار از کنسول فایربیس .

در iOS ، توجه داشته باشید که ورود شماره تلفن به یک دستگاه فیزیکی نیاز دارد و در شبیه ساز کار نمی کند.

نگرانی های امنیتی

احراز هویت تنها با استفاده از یک شماره تلفن ، در حالی که راحت است ، اما از سایر روش های موجود ایمن تر نیست ، زیرا داشتن شماره تلفن به راحتی بین کاربران منتقل می شود. همچنین ، در دستگاه های دارای چندین نمایه کاربر ، هر کاربری که می تواند پیامک دریافت کند می تواند با استفاده از شماره تلفن دستگاه وارد حساب کاربری شود.

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

ورود به سیستم شماره تلفن را برای پروژه Firebase خود فعال کنید

برای ورود کاربران از طریق پیامک ، ابتدا باید روش ورود شماره تلفن را برای پروژه Firebase خود فعال کنید:

  1. در فایربیس کنسول ، باز کردن بخش احراز هویت.
  2. در صفحه ی ثبت نام در روش، فعال کردن شماره تلفن ثبت نام در روش.

سهمیه درخواست ورود به سیستم شماره تلفن Firebase آنقدر زیاد است که اکثر برنامه ها تحت تأثیر قرار نمی گیرند. با این حال ، اگر نیاز دارید با احراز هویت تلفن وارد حجم زیادی از کاربران شوید ، ممکن است لازم باشد طرح قیمت گذاری خود را ارتقا دهید. مراجعه کنید قیمت گذاری صفحه.

شروع به دریافت اعلان های APN (iOS) کنید

برای استفاده از احراز هویت شماره تلفن در iOS ، برنامه شما باید بتواند اعلان های APN را از Firebase دریافت کند. وقتی برای اولین بار در دستگاهی با شماره تلفن خود وارد سیستم می شوید ، احراز هویت Firebase یک اعلان فشار بی صدا به دستگاه ارسال می کند تا تأیید کند که درخواست ورود شماره تلفن از برنامه شما آمده است. (به همین دلیل ، ورود به سیستم شماره تلفن نمی تواند در شبیه ساز استفاده شود.)

برای فعال کردن اعلان های APN برای استفاده با احراز هویت Firebase:

  1. در Xcode متعلق به، را قادر می سازد اطلاعیه های فشار برای پروژه شما.
  2. گواهی APN خود را در Firebase بارگذاری کنید. اگر شما در حال حاضر یک گواهی APN ها را داشته باشد، مطمئن شوید که به ایجاد یک در توسعه مرکز اپل کاربران .

    1. در داخل پروژه خود را در فایربیس کنسول، را انتخاب کنید آیکون چرخ دنده، تنظیمات پروژه را انتخاب کنید، و سپس برگه ابر پیام انتخاب کنید.

    2. دکمه آپلود گواهی انتخاب کنید برای گواهینامه خود را توسعه، گواهی تولید خود را، و یا هر دو. حداقل یکی مورد نیاز است.

    3. برای هر گواهی ، فایل .p12 را انتخاب کرده و در صورت وجود رمز عبور را وارد کنید. مطمئن شوید شناسه بسته این گواهی با شناسه بسته برنامه شما مطابقت دارد. را انتخاب کنید.

کد تأیید را به تلفن کاربر ارسال کنید

برای شروع شماره تلفن ورود به سیستم، در حال حاضر کاربر یک رابط است که باعث آنها را به ارائه شماره تلفن خود را، و سپس پاسخ PhoneAuthProvider::VerifyPhoneNumber به درخواست که فایربیس ارسال کد تأیید هویت به تلفن کاربر با اس ام اس:

  1. دریافت شماره تلفن کاربر.

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

  2. پاسخ PhoneAuthProvider::VerifyPhoneNumber ، عبور به آن شماره تلفن کاربر است.
    class PhoneListener : public PhoneAuthProvider::Listener {
     public:
      ~PhoneListener() override {}
    
      void OnVerificationCompleted(Credential credential) override {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // No need for the user to input the verification code manually.
        // `credential` can be used instead of calling GetCredential().
      }
    
      void OnVerificationFailed(const std::string& error) override {
        // Verification code not sent.
      }
    
      void OnCodeSent(const std::string& verification_id,
                      const PhoneAuthProvider::ForceResendingToken&
                          force_resending_token) override {
        // Verification code successfully sent via SMS.
        // Show the Screen to enter the Code.
        // Developer may want to save that verification_id along with other app states in case
        // the app is terminated before the user gets the SMS verification code.
      }
    };
    
    PhoneListener phone_listener;
    PhoneAuthProvider& phone_provider = PhoneAuthProvider::GetInstance(auth);
    phone_provider->VerifyPhoneNumber(phone_number, kAutoVerifyTimeOut, null,
                                      &phone_listener);
    
    هنگام تماس PhoneAuthProvider::VerifyPhoneNumber ، فایربیس،
    • (در iOS) یک اعلان فشار بی صدا به برنامه شما ارسال می کند ،
    • یک پیام کوتاه حاوی کد احراز هویت به شماره تلفن مشخص شده ارسال می کند و یک شناسه تأیید به عملکرد تکمیل شما ارسال می کند. برای ورود به سیستم کاربر به کد تأیید و شناسه تأیید احتیاج دارید.
  3. شناسه تأیید را ذخیره کرده و هنگام بارگیری برنامه ، آن را بازیابی کنید. با انجام این کار ، می توانید اطمینان حاصل کنید که اگر برنامه شما قبل از تکمیل جریان ورود به سیستم توسط کاربر خاتمه یافته باشد (برای مثال ، هنگام تغییر به برنامه پیامک) هنوز یک شناسه تأیید معتبر دارید.

    می توانید شناسه تأیید را به هر شکلی که می خواهید ادامه دهید. اگر در حال نوشتن با چارچوب C ++ بین پلتفرم هستید ، باید اعلان هایی برای خاتمه و بازیابی برنامه ارائه دهد. در این رویدادها ، می توانید به ترتیب شناسه تأیید را ذخیره و بازیابی کنید.

اگر پاسخ به VerifyPhoneNumber نتایج در OnCodeSent بر روی شنونده خود را به نام، شما می توانید کاربر را بی درنگ به نوع کد امنیتی زمانی که آنها آن را در پیام کوتاه دریافت خواهید کرد.

از سوی دیگر، در صورتی که تماس به VerifyPhoneNumber نتایج در OnVerificationCompleted ، و سپس تایید خودکار موفق شده است و شما در حال حاضر یک دارند Credential که شما با آن می توانید به شرح زیر استفاده کنید.

با کد تأیید وارد سیستم شوید

پس از کاربر برنامه خود را با کد امنیتی از پیام SMS فراهم می کند، ثبت نام کاربر در با ایجاد یک Credential شی از کد امنیتی و تایید ID و عبور است که شی به Auth::SignInWithCredential .

  1. کد تأیید را از کاربر دریافت کنید.
  2. درست Credential شی از کد امنیتی و تایید ID.
    Credential credential = phone_auth_provider->GetCredential(
        verification_id_.c_str(), verification_code.c_str());
        
  3. ثبت نام در کاربر با Credential شی:
    Future<User*> future = auth_->SignInWithCredential(credential);
    future.OnCompletion(
        [](const Future<User*>& result, void*) {
          if (result.error() == kAuthErrorNone) {
            // Successful.
            // User is signed in.
            const User* user = *result.result();
    
            // This should display the phone number.
            printf("Phone number: %s", user->phone_number().c_str());
    
            // The phone number provider UID is the phone number itself.
            printf("Phone provider uid: %s", user->uid().c_str());
    
            // The phone number providerID is 'phone'
            printf("Phone provider ID: %s", user->provider_id().c_str());
          } else {
            // Error.
            printf("Sign in error: %s", result.error_message().c_str());
          }
        },
        nullptr);
    

مراحل بعدی

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

  • در برنامه های خود را، شما می توانید اطلاعات نمایه کاربر از دریافت firebase::auth::User شی:

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      std::string name = user->display_name();
      std::string email = user->email();
      std::string photo_url = user->photo_url();
      // 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 firebase::auth::User::Token() instead.
      std::string uid = user->uid();
    }
    
  • در خود پایگاه فایربیس بیدرنگ و ابر ذخیره سازی قوانین امنیتی ، شما می توانید دریافت امضا در شناسه کاربری منحصر به فرد کاربر را از auth متغیر، و استفاده از آن برای کنترل آنچه داده دسترسی کاربر می تواند.

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

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

auth->SignOut();