android – Firebase SMS authentication sign-in methods – Stack Overflow

Android setup

Убедитесь, что вы выполнили все инструкции шагов 1 и 2 официальной документации Firebase Android phone auth.

Firebase sms authentication sign-in methods

У меня есть следующий код для Android для входа в систему Firebase SMS:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FirebaseApp.initializeApp(this);

        userLoggedIn();
        
        mPhoneNumber = findViewById(R.id.phoneNumber);
        mCode = findViewById(R.id.code);
        mSend = findViewById(R.id.send);

        mAuth = FirebaseAuth.getInstance();

        mSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mVerificationId != null) {
                    // verifyPhoneNumberWithCode(mVerificationId, mCode.getText().toString());
                    verifyPhoneNumberWithCode(mVerificationId, mCode.getText().toString());
                } else {
                    startPhoneNumberVerification();
                }
            }
        });

        mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
                Log.d(TAG, "onVerificationCompleted:"   phoneAuthCredential);
                signInWithPhoneAuthCredentials(phoneAuthCredential);
            }

            @Override
            public void onVerificationFailed(@NonNull FirebaseException e) {

            }
            @Override
            public void onCodeSent(String verificationId, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                super.onCodeSent(verificationId, forceResendingToken);

                mVerificationId = verificationId;
                mSend.setText("Verify Code");
            }

        };
    }

    private void verifyPhoneNumberWithCode(String verificationId, String code) {
        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
        signInWithPhoneAuthCredentials(credential);;
    }

    private void startPhoneNumberVerification() {

        PhoneAuthOptions options =
                PhoneAuthOptions.newBuilder(mAuth)
                        .setPhoneNumber(mPhoneNumber.getText().toString())       // Phone number to verify
                        .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
                        .setActivity(this)                 // Activity (for callback binding)
                        .setCallbacks(mCallbacks)          // OnVerificationStateChangedCallbacks
                        .build();

        PhoneAuthProvider.verifyPhoneNumber(options);
    }

    private void signInWithPhoneAuthCredentials(PhoneAuthCredential phoneAuthCredential) {

        FirebaseAuth.getInstance().signInWithCredential(phoneAuthCredential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful()) {
                    userIsLoggedIn();
                }
            }
        });
    }

    private void userIsLoggedIn() {
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        if (user != null) {
            startActivity(new Intent(getApplicationContext(), MainPageActivity.class));
            finish();
            return;
        }
    }

Код работает, как и предполагалось, но после того, как я добавил следующие два варианта входа в консоль проекта Firebase, приложение больше не требует от новых пользователей подтверждения их SMS-кода; напротив, они автоматически входят в систему после получения кода без необходимости его ввода в приложении.

Firebase Authentication Sign-in providers console

Google
Google sign-in is automatically configured on your connected iOS and
web apps. To set up Google sign-in for your Android apps, you need to
add the SHA1 fingerprint for each app on your Project Settings.

Похожее:  Ингосстрах личный кабинет: вход, регистрация, купить полис ОСАГО, КАСКО, ДМС, ВЗР, через официальный сайт (онлайн портал), калькулятор, электронный, телефон горячей линии 8 800, оформить страхование квартиры, имущества, ответственности, ипотеки - пароль, мобильное приложение,

Email/password
Allow users to sign up using their email address and password. Our
SDKs also provide email address verification, password recovery, and
email address change primitives. Learn more

В моем проекте присутствуют конфигурации SHA-1 и SHA-256.

Есть идеи, почему он автоматически регистрирует новых пользователей, не проверяя отправленный SMS код?

Firebase sms verification / authentication

Я создаю простое гибридное приложение для клиентского проекта, которое выполняет очень простые функции, но будет иметь большой трафик. Поскольку приложение настолько простое, бэкенд обычно не нужен, и firebase кажется идеальной платформой для этого проекта.

У меня проблемы только с частью SMS-верификации / аутентификации Firebase. Однако после проведения обширного исследования и чтения документации я пришел к выводу, что нет простого способа сделать это. На данный момент я нашел следующее:

  1. Fabric.io Digits имеет отличный JS API, однако по какой-то причине firebase и digits не очень хорошо работают вместе: https://groups.google.com/forum/#!topic/firebase-talk/sB7lPuyCVBQ
  2. Facebook Account Kit – Всего неделю назад Facebook выпустил новый набор для SMS-верификации и аутентификации, хотя, похоже, у него все та же проблема, что и у fabric.io digits, по крайней мере, пока не доказано обратное.
  3. Twilio / Nexmo через NodeJS – Это оба эпических сервиса с отличными JS API, однако, насколько я понимаю, для этого потребуется отдельный внутренний сервер для обработки обмена токенами JWT. А это еще один сервер, который станет узким местом в случае большого трафика, и еще одна уязвимость безопасности, которой клиентская команда должна будет управлять отдельно. Не самый приятный.
  4. Twilio / Nexmo & Auth0 – Пока это кажется лучшим вариантом, где аутентификация и управление пользователями осуществляется с помощью Auth0, однако это решение может быстро стать дорогостоящим, поскольку Twilio или Nexmo и Auth0 являются платными решениями. Не то чтобы я был скрягой, ожидающим, что все будет работать бесплатно, но это кажется очень дорогим дополнительным шагом, учитывая, что это просто отправка жетонов. [
  5. Я помню, что где-то читал предложение использовать номера телефонов в качестве электронной почты в firebase как: 123-456-7890@example.com и использовать коды безопасности, отправленные по смс в качестве паролей, что кажется очень небрежным по многим причинам.
Похожее:  Личный кабинет АльянсТелеком: вход в ЛК, регистрация, официальный сайт

Обычно в этом виновата неродная природа гибридных мобильных приложений или JS API, но впервые (по крайней мере, у меня) возникло ощущение, что это не так. Прежде чем рассматривать AWS и настраивать весь бэкенд для клиента, я хотел бы спросить добрых и внимательных членов сообщества в последний раз, потому что на данный момент я предполагаю, что Firebase не является жизнеспособным вариантом.

Есть ли другой способ обработки такого рода аутентификации без внутреннего сервера или промежуточного сервиса? Кто-нибудь уже использовал подобные решения?


Пересмотренный: май 2022 г.

В Firebase теперь встроена поддержка проверки и аутентификации по телефону. См. мой собственный ответ, опубликованный ниже.


Пересмотренный: апрель 2022 г.

Облачные функции теперь поддерживаются Firebase нативно. С помощью Cloud Functions вы можете выполнить эту и многие другие задачи без установки каких-либо серверов.


Пересмотренный: октябрь 2022 г.

Вместе Fabric.io и Firebase запустили больше функций Fabric и интегрировали Digits в аутентификацию телефонов Firebase.

Ios setup

Обязательно следуйте всем инструкциям в шагах 1 и 2 официальной документации по аутентификации телефона Firebase для iOS. В частности, вам может понадобиться заново загрузить файл GoogleService-Info.plist для Firebase, а для того, чтобы поток reCAPTCHA работал, вы должны убедиться, что ваша пользовательская схема URL была добавлена в файл plist вашего проекта.

Проверка приложения необходима для аутентификации телефона, и она осуществляется автоматически с помощью облачных сообщений Firebase, отправляемых в приложение только для данных. Только реальные устройства с включенным фоновым обновлением в приложении могут использовать облачные сообщения, содержащие только данные. Проверка приложений использует резервный поток reCAPTCHA при отключении фонового обновления или при использовании симулятора, что позволяет проверить правильность настройки.

Похожее:  Справочник абонента в Новосибирске – Сибирские сети

Testing

Firebase provides support for locally testing phone numbers. For local testing to work, you must have ensured your local
machine SHA1 debug key was added whilst creating your application on the Firebase Console. View the Getting Started
guide on how to set this up.

On the Firebase Console, select the “Phone” authentication provider and click on the
“Phone numbers for testing” dropdown.

Добавьте сюда свежий номер телефона (например, 44 7444 555666), а также тестовый код (например, 123456).

Once added, the number can be used with the signInWithPhoneNumber method, and entering the code specified will
cause a successful sign-in.

Использовать firebase как сервис sms-авторизации?

Firebase предоставляет возможность авторизации по номеру телефона. Можно ли использовать ее отдельно как сервис для посылки SMS для авторизации в мобильном приложении, например через REST-API?

То есть я не хочу встраивать Firebase-auth-sdk в свое приложение, но хочу взаимодействовать с Firebase со стороны сервера. Имеет ли это технический смысл? Что противоречит правилам Google?

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector