2016-06-23 7 views
5

Innymi słowy, czy istnieje sposób sprawdzenia, czy użytkownik (kiedy ustawia, pozwala powiedzieć użytkownikom // wiadomość e-mail), czy rzeczywiście jest to identyfikator e-mail użytkownika, który jest zalogowany?W jaki sposób możemy zagwarantować, że wiadomość e-mail zapisana przez użytkownika Firebase jest rzeczywiście jego własną wiadomością e-mail?

Budujemy aplikację typu firebase, w której niektóre aspekty usługi są dostarczane za pośrednictwem powiadomień e-mail. Nie chcemy wysyłać e-maili do niewłaściwego użytkownika. Wydaje się, że nie ma sposobu, aby zagwarantować, że informacje o e-mailu zapisane na ścieżce e-mail użytkowników są takie same jak adres e-mail używany do logowania (bezpośrednio lub przez Google lub Facebook itp.).

Moim zdaniem, jeśli auth (reguły), oprócz auth.uid pola auth.email, rozwiąże problem, a zasady mogą zostać zapisane, aby poradzić sobie z przypadkiem użycia.

+1

Dlaczego chcesz? Adres e-mail zgłoszony przez moje konto Google to nie to samo, co adres, na który wolę otrzymywać e-maile. Tak długo, jak zweryfikowałeś własność adresu, wysyłając do niego e-mail z linkiem potwierdzającym, nie powinno to mieć znaczenia, jaki to adres. –

+0

Powodem jest to, że świadczymy usługi pocztą e-mail i istnieje niespójność, która staje się przyszłym zagrożeniem bezpieczeństwa. Złośliwy użytkownik może potencjalnie podszyć się pod e-maile innych osób i potencjalnie może skorzystać z usług/kredytów itp. – kvs

Odpowiedz

9

Najnowsza wersja uwierzytelniania Firebase obsługuje weryfikację poczty e-mail.

Jeżeli dostawca tożsamości (e-mail + hasło, google) obsługuje weryfikację opcjonalny adres e-mail, że informacje te są udostępniane w API i zasad bezpieczeństwa. (**)

Na przykład, że JavaScript API has an emailVerified property można sprawdzić w kodzie:

firebase.auth().currentUser.emailVerified 

prawdziwą

w zasadach bezpieczeństwa można uzyskać dostęp zarówno adres e-mail i to, czy jest on zweryfikowany, co umożliwia korzystanie z niektórych przydatnych przypadków. Z tych zasad na przykład tylko uwierzytelnionym, zweryfikowany użytkownik Gmaila można napisać swój profil:

{ 
    "rules": { 
    ".read": "auth != null", 
    "gmailUsers": { 
     "$uid": { 
     ".write": "auth.token.email_verified == true && 
        auth.token.email.matches(/.*@gmail.com$/)" 
     } 
    } 
    } 
} 

(**) Dotyczy to logowania Google i e-mail + hasło na pewno. O ile mi wiadomo, Facebook ujawni tylko adres e-mail, jeśli został zweryfikowany, więc możesz na tym polegać.

+3

Nie znajduję auth.token w żadnej dokumentacji reguł bezpieczeństwa. Czy mógłbyś opublikować link? Wygląda na to, że to może zadziałać. – kvs

+2

To rozwiązanie wydaje się działać. Dzięki za pomoc. – kvs