Я аутентифицирую пользователей, используя телефонную аутентификацию. Если я хочу предотвратить регистрацию определенного набора телефонных номеров от разных пользователей, это возможно. Например, их забанили, выкинули с платформы, я сохранил копию их забаненного номера в реф. Они пытаются снова зарегистрироваться с тем же номером телефона. Они не могут двигаться дальше.
Один из способов, о котором я подумал, заключается в том, что как только они вводят свой номер телефона, я могу проверить этот реф, прежде чем позволить им перейти к смс. Мне было интересно, есть ли лучший способ, уже встроенный. Может, через консоль?
номер телефона:
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
})
Что, если они полностью удалят свой аккаунт. Это легко обойти, чтобы снова зарегистрироваться.
То есть вы хотите сказать, что если вы отключите учетную запись, пользователь все равно сможет ее удалить? Это не кажется правильным.
хмммм, я никогда не думал об этом. Это очень хорошая идея. Я должен это обдумать.
Это будет работать везде, кроме ЕС, потому что их законы гласят, что вы должны удалить весь пользовательский контент, если он его потребует. Поэтому я блокирую, отключаю их учетную запись, они отправляют запрос на удаление, они могут зарегистрироваться снова. Конечно, если они удалят свою учетную запись из-за законов, я также не могу хранить копию их номера телефона в базе данных. Возможно, я смогу остаться в офисе, но это не помешает им зарегистрироваться снова. За пределами ЕС это хорошая альтернатива.
Вы, конечно, можете попытаться заблокировать номер в клиентском приложении, но это не совсем безопасно. Код клиентского приложения может быть скомпрометирован, и ему нельзя доверять. Ваше решение должно находиться на серверной части, которой вы управляете, и может обновляться без необходимости публиковать новую версию вашего приложения.
Одна вещь, которую вы можете сделать, это написать триггер auth onCreate с помощью Cloud Functions, который проверяет номер телефона только что созданной учетной записи и использует Firebase Admin SDK для немедленного удаления учетной записи, если вы не хотите это остаться.
Облачные функции — это правильный путь. Спасибо!
Вам лучше использовать бэкэнд для авторизации.
Конечно, вы можете поместить код авторизации в свое приложение.
Когда пользователь пытается зарегистрироваться на вашей платформе, приложение может сканировать список заблокированных номеров телефонов.
Но это не хорошо для безопасности.
Можете ли вы быть уверены, что ваше приложение никогда не взломают?
Если это возможно, вы можете это сделать.
Спасибо.
Вы можете перейти на 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.`);
}
});
Разве вы не хотите просто отключить учетную запись в консоли аутентификации Firebase и оставить ее такой, чтобы они не могли войти в систему?