Ci sono passato con sled.com. Ci sono più problemi qui per quanto riguarda la creazione di account e il supporto di più account di terze parti per l'accesso. Alcuni di loro sono:
- Devi supportare sia una password locale che accessi di terze parti?
Per sled.com, ho deciso di eliminare la password locale a causa del piccolo valore aggiunto e del costo aggiuntivo per la protezione di un modulo di immissione della password. Esistono molti attacchi noti per la violazione delle password e, se si intende introdurre password, è necessario assicurarsi che non siano facili da violare. È inoltre necessario memorizzarli in un hash unidirezionale o qualcosa di simile per evitare che trapelino.
- Quanta flessibilità vuoi consentire nel supportare più account di terze parti?
Sembra che tu abbia già scelto i tre provider di accesso: Facebook, Twitter e LinkedIn. È fantastico perché significa che stai utilizzando OAuth e stai lavorando con un set ben definito di provider affidabili. Non sono un fan di OpenID. La domanda rimanente è se è necessario supportare più account di terze parti dallo stesso provider (ad esempio un account locale con due account Twitter collegati). Suppongo di no, ma se lo fai, dovrai adattarlo nel tuo modello di dati.
Per Sled, supportiamo l'accesso con Facebook, Twitter e Yahoo! e all'interno di ciascun account utente memorizzare una chiave per ognuno: {"_id": "djdjd99dj", "yahoo": "dj39djdj", twitter: "3723828732", "facebook": "12837287"}. Abbiamo impostato una serie di vincoli per garantire che ogni account di terze parti possa essere collegato solo a un singolo account locale.
Se hai intenzione di consentire più account dallo stesso fornitore di terze parti, dovrai utilizzare elenchi o altre strutture per supportare tale e, con ciò, tutte le altre restrizioni per garantire l'univocità.
- Come collegare più account?
La prima volta che l'utente si iscrive al servizio, si rivolge innanzitutto al provider di terze parti e restituisce un ID di terze parti verificato. Quindi crei un account locale per loro e raccogli qualsiasi altra informazione desideri. Raccogliamo il loro indirizzo e-mail e chiediamo anche loro di scegliere un nome utente locale (proviamo a precompilare il modulo con il loro nome utente esistente dall'altro fornitore). Avere una qualche forma di identificatore locale (e-mail, nome utente) è molto importante per il recupero dell'account in un secondo momento.
Il server sa che si tratta del primo accesso se il browser non ha un cookie di sessione (valido o scaduto) per un account esistente e che l'account di terze parti utilizzato non viene trovato. Cerchiamo di informare l'utente che non stanno solo effettuando l'accesso, ma stanno creando un nuovo account in modo che, se hanno già un account, si speri che si interrompano e accedano con il loro account esistente.
Usiamo lo stesso flusso esatto per collegare account aggiuntivi, ma quando l'utente ritorna da una terza parte, viene utilizzata la presenza di un cookie di sessione valido per distinguere tra un tentativo di collegare un nuovo account a un'azione di accesso. Consentiamo solo un account di terze parti per ciascun tipo e se ne esiste già uno collegato, blocca l'azione. Non dovrebbe essere un problema perché l'interfaccia per collegare un nuovo account è disabilitata se ne hai già uno (per provider), ma per ogni evenienza.
Se un utente ha tentato di collegare un nuovo account di terze parti che è già collegato a un account locale, è sufficiente richiedere loro di confermare che desiderano unire i due account (supponendo che sia possibile gestire tale unione con il proprio set di dati - spesso più facile a dirlo di fatto). Puoi anche fornire loro un pulsante speciale per richiedere un'unione, ma in pratica tutto ciò che stanno facendo è collegare un altro account.
Questa è una macchina a stati piuttosto semplice. L'utente torna dalla terza parte con un ID account di terze parti. Il database può trovarsi in uno dei tre stati:
- L'account è collegato a un account locale e non è presente alcun cookie di sessione -> Accesso
- L'account è collegato a un account locale ed è presente un cookie di sessione -> Unisci
- L'account non è collegato a un account locale e non è presente alcun cookie di sessione -> Iscriviti
L'account non è collegato a un account locale ed è presente un cookie di sessione -> Collegamento di un account aggiuntivo
- Come eseguire il recupero dell'account con fornitori di terze parti?
Questo è ancora territorio sperimentale. Non ho visto un UX perfetto per questo in quanto la maggior parte dei servizi fornisce sia una password locale accanto agli account di terze parti e quindi si concentra sul caso d'uso "password dimenticata", non su tutto ciò che può andare storto.
Con Sled, abbiamo scelto di utilizzare "Hai bisogno di aiuto per accedere?" e quando fai clic, chiedi all'utente la sua e-mail o nome utente. Lo cerchiamo e se troviamo un account corrispondente, inviamo a quell'utente un link che può accedere automaticamente al servizio (valido per una volta). Una volta entrati, li portiamo direttamente alla pagina di collegamento dell'account, diciamo loro che dovrebbero dare un'occhiata e potenzialmente collegare altri account e mostriamo loro gli account di terze parti che hanno già collegato.