2016-12-15 2 views
0

Когда пользователь регистрируется на моем сайте, я звоню firebase.auth().createUserWithEmailAndPassword(email, password), и их пользователь был успешно создан.Проверьте, зарегистрирован ли пользователь по электронной почте в Firebase

В основном я хочу, чтобы у меня была учетная запись «У меня есть учетная запись» на моей странице. Если они вводят свой адрес электронной почты, он должен отправить запрос Firebase ТОЛЬКО своим электронным письмом, а Firebase затем должен вернуть true/false (или что-то подобное).

«Обходной путь», который я нашел, пытается создать пользователя или просто подписаться в Firebase с пустым паролем. Я предполагаю, что Firebase вернет «неправильный пароль» (имея в виду, что у них есть учетная запись). firebase.auth().fetchProvidersForEmail("[email protected]") также может работать, но я не смог понять, как это работает.

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

Вот что я придумал, что работает:

firebase.auth().signInWithEmailAndPassword(this.username, " ").catch(function(error) { 
    if(error.code === "auth/wrong-password") { 
     console.log("USER HAS AN ACCOUNT"); 
    } else if(error.code === "auth/user-not-found"){ 
     console.log("NEW USER"); 
    } 
}); 

Просто войдите с паролем, который не работает.

+0

FWIW «У меня есть учетная запись», как правило, не самая лучшая практика безопасности. Как кто-то должен выяснить, есть ли у них учетная запись, путем успешной регистрации или неспособности сделать это. В противном случае, плохие участники могут использовать функцию «У меня есть учетная запись» для определения пользователей вашего приложения и (в худшем случае) разрабатывают кампании фишинга для копья, основанные на вашем сервисе. –

+0

@MichaelBleigh Мне не нужна лекция по безопасности аккаунта. Спасибо за ваши проблемы. – MortenMoulder

+0

@MichaelBleigh Извините, если это получилось грубо. Это было не мое намерение :) Я пытаюсь создать новую систему аутентификации (почти как Microsoft), где вы начинаете вводить свой адрес электронной почты, а затем проверяет, есть ли у пользователя размытие. – MortenMoulder

ответ

1

Вот один из способов вы можете подойти к нему: когда пользователь впервые подписывает, кодировать их по электронной почте в копировально-дружески и вставить его в базу данных в реальном времени:

firebase.database().ref('accountCheck') 
    .child(user.email.replace(/\./g, '%2E')).set(true) 

Тогда писать правила безопасности, такие, что список адресов электронной почты можно получить в индивидуальном порядке, но не все вместе:

{ 
    "rules": { 
    "accountCheck": { 
     ".read": false, 
     ".write": false, 
     "$encoded": { 
     ".read": true, 
     ".write": "$encoded === auth.token.email.replace('.', '%2E') && newData.val() === true" 
     } 
    } 
    } 
} 

Теперь чек размытость будет принимать значение входного и посмотреть, если он существует в БД:

firebase.database().ref('accountCheck') 
    .child(input.value.replace(/\./g, '%2E')) 
    .once('value').then(snap => { 
    if (snap.exists()) { 
     // account exists 
    } 
    }); 
+0

Привет, Майкл! Большое спасибо за предложение. Если я это сделаю, мне нужно будет синхронизировать список с пользователями и электронной почтой, не так ли? Я предполагаю, что это единственный другой способ, кроме как делать это, как я опубликовал в нижней части моего сообщения. – MortenMoulder

+0

Да, это единственные два способа, о которых я могу думать в данный момент. –

Смежные вопросы