Firebase - можно ли заблокировать номер телефона от регистрации

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

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

номер телефона:

PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate: nil) { (verificationID, error) in

    // phone is verified, do a check on the kicked out ref before they can proceed to sms
}

SMS:

let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID, verificationCode: smsCode)

Auth.auth().signIn(with: credential, completion: { (authDataResult, error) in

    // user is authenticated let them proceed inside the app or block them here
})

Разве вы не хотите просто отключить учетную запись в консоли аутентификации Firebase и оставить ее такой, чтобы они не могли войти в систему?

Doug Stevenson 19.12.2020 19:03

Что, если они полностью удалят свой аккаунт. Это легко обойти, чтобы снова зарегистрироваться.

Lance Samaria 19.12.2020 19:05

То есть вы хотите сказать, что если вы отключите учетную запись, пользователь все равно сможет ее удалить? Это не кажется правильным.

Doug Stevenson 19.12.2020 19:06

хмммм, я никогда не думал об этом. Это очень хорошая идея. Я должен это обдумать.

Lance Samaria 19.12.2020 19:09

Это будет работать везде, кроме ЕС, потому что их законы гласят, что вы должны удалить весь пользовательский контент, если он его потребует. Поэтому я блокирую, отключаю их учетную запись, они отправляют запрос на удаление, они могут зарегистрироваться снова. Конечно, если они удалят свою учетную запись из-за законов, я также не могу хранить копию их номера телефона в базе данных. Возможно, я смогу остаться в офисе, но это не помешает им зарегистрироваться снова. За пределами ЕС это хорошая альтернатива.

Lance Samaria 19.12.2020 19:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
595
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

Одна вещь, которую вы можете сделать, это написать триггер auth onCreate с помощью Cloud Functions, который проверяет номер телефона только что созданной учетной записи и использует Firebase Admin SDK для немедленного удаления учетной записи, если вы не хотите это остаться.

Облачные функции — это правильный путь. Спасибо!

Lance Samaria 19.12.2020 19:37

Вам лучше использовать бэкэнд для авторизации.

Конечно, вы можете поместить код авторизации в свое приложение.

Когда пользователь пытается зарегистрироваться на вашей платформе, приложение может сканировать список заблокированных номеров телефонов.

Но это не хорошо для безопасности.

Можете ли вы быть уверены, что ваше приложение никогда не взломают?

Если это возможно, вы можете это сделать.

Спасибо.

Вы можете перейти на Identity Platform, которая поддерживает функции блокировки. Вы можете использовать событие beforeCreate, чтобы заблокировать регистрацию:

export.beforeCreate = authClient.functions().beforeCreateHandler((user, context) => {
  if (isDisallowed(user.phoneNumber)) {
    throw new gcipCloudFunctions.https.HttpsError(
     'invalid-argument', `"${user.phoneNumber}" is unauthorized.`);
  }
});

Другие вопросы по теме