Cose da considerare per invitare e limitare gli utenti a un sito Web beta

1

Quali sono le migliori pratiche per la progettazione di un flusso di lavoro per invitare gli utenti a un sito Web beta? Questo non è per alcun linguaggio di programmazione specifico. 2 requisiti principali sono

  1. Un utente interessato può richiedere un invito utilizzando la sua email
  2. Un utente registrato può invitare altri via email (o social media forse?).

I miei pensieri:

  1. Nel caso # 1, su invio, genera un hash reversibile dell'email e il timestamp di invio.
  2. Quindi, invia un'email con l'hash come parametro di query. Quando qualcuno fa clic sull'URL, il controller / router decodifica l'hash e convalida il timestamp. Se valido, controlla se l'utente esiste già, altrimenti inoltralo alla pagina di registrazione con il campo ID email pre-compilato (o bloccato) e consenti all'utente di inserire & conferma password e altri dettagli.
  3. Se il timestamp era scaduto, invia un'altra email allo stesso utente con un nuovo hash.
  4. Il caso n. 2 dovrebbe essere esattamente simile, ma al posto dell'utente interessato, un utente esistente riempie il modulo di invito e l'e-mail inviata all'utente interessato avrà l'e-mail o il nome dell'utente esistente.

Ci sono problemi di sicurezza in questo approccio? Ci sono approcci che potrebbero fornire una migliore UX?

    
posta brayne 11.02.2014 - 00:58
fonte

1 risposta

2

Esperienza utente

In termini di esperienza utente, hai giù:

  1. L'utente richiede l'invito
  2. Qualcuno o un processo concede l'invito e una e-mail viene inviata all'utente
  3. L'utente fa clic su un collegamento, viene chiesto di inserire i dettagli di registrazione

Per le iscrizioni ai referral:

  1. L'utente richiede l'invito per un altro utente
  2. Agli altri utenti viene automaticamente concesso l'invito e l'e-mail inviata
  3. L'altro utente fa clic su un collegamento, viene chiesto di inserire i dettagli di registrazione

Attuazione

In termini di implementazione, tuttavia, mi hai perso a "hash reversibile".

In breve, utilizzerei un token a una volta (stringa arbitraria) per la convalida dell'invito e ho una tabella per memorizzare gli inviti.

La tabella sarà simile a:

  • InvitationId - identity
  • Email - stringa
  • Creato - Data / ora
  • Token - stringa
  • Scadenza - Data / ora

I due processi sono in realtà abbastanza simili, quindi coprirò entrambi i pezzi insieme.

1. Richiesta di invito

L'utente inserisce la propria e-mail, richiedendo un invito o come utente esistente, immette un'e-mail per un altro utente.

In entrambi i casi, ciò renderebbe una nuova voce nella tabella inviti , popolando i campi Email e Crea .

Nel caso di un utente esistente che invia un invito, invocherebbe immediatamente la parte successiva:

2. Concessione di invito

Quando qualcuno o qualche processo decide di concedere l'invito, farebbe due cose:

  • Genera una data token e Scadenza casuali e aggiorna la tabella
  • Invia una e-mail contenente un URL di registrazione con il token

Ci sono molti modi per generare un token casuale, ma qualcosa di semplice potrebbe essere lo sha1 di un Guid, quindi ti ritroverai con qualcosa come 1bde8e3ed5709cb399cff0e910442d9b99e181fb .

Dovresti quindi inviare il link come https://mysite.com/signup?token=1bde8e3ed5709cb399cff0e910442d9b99e181fb

3. Registrazione

La prima cosa da fare, ovviamente, è convalidare il token ricevuto: esiste e non è ancora scaduto?

Se tutto è buono, allora permetti all'utente di registrarsi e, al termine, rimuovere la voce invito .

Note aggiuntive

L'approccio basato sui token è molto più sicuro, dal momento che non può essere "incrinato". Qualcuno dovrebbe usare la forza bruta per indovinare ogni possibile token, e si potrebbe attenuare questo bloccando l'indirizzo e-mail per il resto della registrazione a quello dell'invito.

Mantenere questo separato da quello che alla fine sarà il processo di iscrizione "non beta" è anche pulito in termini di uscita dalla beta: dovresti essere in grado di rimuovere questa tabella e il codice relativo abbastanza facilmente, al contrario di avere campi extra memorizzato con i normali account utente. Pensa al token più come un permesso per creare una nuova voce utente.

Tendo a non implementare più del necessario e, non conoscendo il tuo caso d'uso, è difficile speculare su alcune altre cose che potresti voler implementare:

  • Potresti voler mantenere gli inviti per qualche motivo (segnalazione?), quindi potresti usare un campo stato o qualcosa di simile, e / o campi data indicanti le varie azioni

  • Potresti voler inviare nuovamente le e-mail, quindi potrebbe essere utile memorizzare i campi che indicano quando sono state inviate e-mail (e quante)

  • Potresti voler tracciare l'origine di registrazione (ad es., diretta da un URL o da un altro utente) e potresti archiviarla in un campo aggiuntivo quando crei la voce invito , e forse anche trasferirlo sul conto una volta che si sono registrati.

risposta data 11.02.2014 - 07:45
fonte

Leggi altre domande sui tag