Przeszedłem przez to ze sled.com. Istnieje wiele problemów związanych z tworzeniem kont i obsługą logowania wielu kont innych firm. Niektórzy z nich są:
- Czy potrzebujesz obsługiwać zarówno hasło lokalne, jak i loginy osób trzecich?
W przypadku sled.com zdecydowałem się porzucić hasło lokalne ze względu na niewielką wartość, jaką dodaje, i dodatkowy koszt zabezpieczenia formularza wprowadzania hasła. Istnieje wiele znanych ataków na łamanie haseł i jeśli zamierzasz wprowadzić hasła, upewnij się, że nie są one łatwe do złamania. Musisz również przechowywać je w jednokierunkowym skrócie lub czymś podobnym, aby zapobiec ich wyciekowi.
- Jak dużą elastyczność chcesz pozwolić na obsługę wielu kont innych firm?
Wygląda na to, że wybrałeś już trzech dostawców logowania: Facebook, Twitter i LinkedIn. To świetnie, ponieważ oznacza, że używasz protokołu OAuth i współpracujesz z dobrze zdefiniowanym zbiorem zaufanych dostawców. Nie jestem fanem OpenID. Pozostaje pytanie, czy musisz obsługiwać wiele kont innych firm od tego samego dostawcy (np. Jedno konto lokalne z dwoma połączonymi kontami na Twitterze). Zakładam, że nie, ale jeśli to zrobisz, będziesz musiał uwzględnić to w swoim modelu danych.
W przypadku Sled obsługujemy logowanie za pomocą Facebooka, Twittera i Yahoo! a na każdym koncie użytkownika przechowuj klucz dla każdego z nich: {"_id": "djdjd99dj", "yahoo": "dj39djdj", twitter: "3723828732", "facebook": "12837287"}. Skonfigurowaliśmy kilka ograniczeń, aby zapewnić, że każde konto innej firmy może być połączone tylko z jednym kontem lokalnym.
Jeśli zamierzasz zezwolić na wiele kont od tego samego zewnętrznego dostawcy, będziesz musiał użyć list lub innych struktur do obsługi tego, a wraz z tym wszystkich innych ograniczeń, aby zapewnić unikalność.
Gdy użytkownik po raz pierwszy rejestruje się w Twojej usłudze, najpierw udaje się do dostawcy zewnętrznego i wraca ze zweryfikowanym identyfikatorem innej firmy. Następnie tworzysz dla nich konto lokalne i zbierasz wszelkie inne informacje, które chcesz. Zbieramy ich adresy e-mail, a także prosimy ich o wybranie lokalnej nazwy użytkownika (staramy się wstępnie wypełnić formularz ich istniejącą nazwą użytkownika od innego dostawcy). Posiadanie jakiejś formy lokalnego identyfikatora (e-mail, nazwa użytkownika) jest bardzo ważne dla późniejszego odzyskania konta.
Serwer wie, że jest to pierwsze logowanie, jeśli przeglądarka nie ma pliku cookie sesji (ważnego lub wygasłego) dla istniejącego konta, a używane konto strony trzeciej nie zostało znalezione. Staramy się poinformować użytkownika, że nie tylko się loguje, ale tworzy nowe konto, więc jeśli ma już konto, miejmy nadzieję, że zamiast tego zatrzyma się i zaloguje się na swoje istniejące konto.
Używamy dokładnie tego samego przepływu do łączenia dodatkowych kont, ale gdy użytkownik wraca od strony trzeciej, obecność ważnego pliku cookie sesji jest używana do odróżnienia próby połączenia nowego konta z akcją logowania. Zezwalamy tylko na jedno konto innej firmy każdego typu, a jeśli jest już jedno połączone, blokuj akcję. Nie powinno to stanowić problemu, ponieważ interfejs do łączenia nowego konta jest wyłączony, jeśli już je masz (na dostawcę), ale na wszelki wypadek.
Jeśli użytkownik próbował połączyć nowe konto innej firmy, które jest już połączone z kontem lokalnym, po prostu monitujesz go o potwierdzenie, że chce połączyć oba konta (zakładając, że możesz obsłużyć takie połączenie ze swoim zestawem danych - często łatwiej powiedzieć niż gotowe). Możesz również udostępnić im specjalny przycisk, aby poprosić o połączenie, ale w praktyce wszystko, co robią, to łączenie innego konta.
To jest dość prosta maszyna stanowa. Użytkownik wraca od firmy zewnętrznej z identyfikatorem konta innej firmy. Twoja baza danych może znajdować się w jednym z trzech stanów:
- Konto jest połączone z kontem lokalnym i nie ma plików cookie sesji -> Zaloguj się
- Konto jest połączone z kontem lokalnym i obecny jest plik cookie sesji -> Scal
- Konto nie jest połączone z kontem lokalnym i nie ma plików cookie sesji -> Rejestracja
Konto nie jest połączone z kontem lokalnym i obecny jest plik cookie sesji -> Łączenie konta dodatkowego
- Jak odzyskać konto u dostawców zewnętrznych?
To wciąż jest terytorium eksperymentalne. Nie widziałem do tego idealnego UX, ponieważ większość usług zapewnia zarówno lokalne hasło obok kont osób trzecich, a zatem koncentruje się na przypadku użycia „zapomniałem hasła”, a nie na wszystkim innym, co może pójść nie tak.
W przypadku Sled zdecydowaliśmy się na użycie opcji „Potrzebujesz pomocy przy logowaniu?” a kiedy klikniesz, poproś użytkownika o jego adres e-mail lub nazwę użytkownika. Sprawdzamy to i jeśli znajdziemy pasujące konto, wyślij do tego użytkownika e-mail z linkiem, który może automatycznie zalogować go do usługi (dobre tylko raz). Po wejściu przenosimy ich bezpośrednio do strony łączenia kont, informujemy, że powinni zajrzeć i potencjalnie połączyć dodatkowe konta, a także pokazać im konta innych firm, które już połączyli.