Usando Facebook per autenticarsi, come collegarmi al record utente nella mia app? E-mail?

5

Uso Facebook per autenticare gli utenti. Abbiamo anche un login utente / password convenzionale e un modulo di registrazione. Ad ogni modo, quando un utente sceglie di accedere con Facebook, usiamo la seguente procedura:

  1. Reindirizza a Facebook, l'utente è autenticato, restituito da Facebook all'app - email, nome, ID di Facebook ecc. è fornito da FB .. ma naturalmente, nessuna password
  2. Nel nostro sistema cerchiamo qualsiasi utente esistente tramite l'indirizzo email. Se viene trovato un utente, questo è l'utente attualmente connesso; altrimenti, crea un nuovo utente con le informazioni utente restituite da FB.

L'e-mail ha un senso in quanto non vogliamo indirizzi e-mail duplicati (anche il database al momento non lo consentirà a causa dell'indice univoco) quindi se un utente si è già iscritto con quell'indirizzo email, non tenterà di crea un nuovo utente per loro. Invece tirerà l'utente precedentemente registrato.

Questo è l'approccio del suono? Esplorando tutte le possibilità, mi chiedevo cosa succederà nel caso in cui l'utente provi a registrarsi con il nostro modulo di registrazione convenzionale, ma poiché hanno già creato un account con quell'e-mail dal loro accesso iniziale a Facebook, non permetteremo l'e-mail duplicata. Quindi, avendo preso la decisione di usare il loro Facebook per accedere, sono bloccati con quel metodo. È un approccio comune / ok?

Anche senza intenzione, se prima usano il modulo di registrazione convenzionale e impostano il loro account in questo modo, abbiamo la loro password, in modo che possano accedere utilizzando il nostro modulo o accedere con FB e l'account utente verrà semplicemente estratto via email. Tuttavia, se scelgono di accedere con FB per la prima volta e il loro account viene creato in questo modo (non otterremo il pw), devono sempre utilizzare solo FB. Non ho assolutamente idea se questo possa essere problematico o no, voglio assolutamente andare con l'opzione di - qualunque cosa tu abbia scelto di loggarti / registrarti la prima volta - quindi è quello con cui ti attacchi:)

Sono un po 'nuovo per gli utenti che si registrano con più accessi, quindi si dirige un po' di "what ifs" ecc. Apprezzerei qualsiasi consiglio su questo e approcci comuni. Grazie

In alternativa, perdiamo l'indice nel campo della posta elettronica, aggiungiamo un campo da qualche parte per memorizzare l'ID di Facebook e, a livello di applicazione, decidiamo se autorizzare l'indirizzo e-mail duplicati e più distinzione tra gli utenti di diversi metodi di accesso (quindi consentire un utente avere un account utente convenzionalmente registrato e / o un account utente di login / utente di Facebook separato, entrambi con lo stesso indirizzo email - ma diversi metodi di accesso - almeno se l'utente cancella il proprio account Facebook, possono creare un account con i loro email attraverso il nostro modulo di registrazione)

    
posta Martyn 10.02.2015 - 03:40
fonte

2 risposte

2

Separo utenti / profili dall'autenticazione sulle mie app. Questo potrebbe essere un approccio che puoi usare. Soprattutto se in futuro pensi di poter aggiungere twitter o altri provider di autenticazione al tuo sistema.

Fondamentalmente creo una tabella denominata Credenziali che memorizza l'ID utente unico nel mio sistema e l'ID univoco fornito dal provider. L'e-mail non è buona perché l'utente potrebbe cambiare la sua e-mail con il provider. Facebook fornisce un ID univoco per ciascun utente nel proprio token.

Quando un utente esegue l'autenticazione, cerco l'ID del provider corrispondente nella tabella delle credenziali. (Non dimenticare di registrare quale provider perché altrimenti potresti trovare una corrispondenza per un login su Twitter quando l'utente ha effettuato l'accesso con Facebook). Infine, prendo l'utente corrispondente nel mio sistema che ha lo stesso ID utente del record delle credenziali.

Non ci sono molti passaggi in realtà che stavo proprio spiegando. In verità ho solo bisogno di una query

select U.* from Users u
inner join Credentials on
u.userId=Credentials.userId
where Credentials.ProviderId =?
and Credentials.Provider=?

Il nome utente e la password memorizzati di sistema, ovviamente, avrebbero un aspetto diverso. Ma sai già come gestirlo.

Per quanto riguarda richiedere un accesso separato anche quando l'utente passa attraverso Facebook. Per favore, non farlo ... questa è la cosa più irritante per me come utente quando mi viene data la possibilità di accedere tramite Facebook e il sistema richiede ancora che io crei una password. Ho lasciato siti nel mezzo della registrazione proprio per questo motivo.

    
risposta data 11.02.2015 - 21:08
fonte
1

Alcuni siti (ad es .: Asana ) impiegano la stessa tattica che fai tu: se ti registri usando una terza parte e poi prova a registrarti di nuovo usando il loro proprio login, ti verrà gentilmente ricordato che sei già registrato e reindirizzato al login di terze parti. Se ci vai al contrario, sarai comunque in grado di accedere utilizzando la tua password.

Altri siti (ad es. Wunderlist ) ti consentono di creare una password anche se ti registri utilizzando una terza parte.

Quindi entrambi gli approcci esistono là fuori. Quello che usi dipende da te.

Il primo approccio rende la registrazione più semplice. L'esperienza di accesso potrebbe essere diversa per utenti diversi, ma è altrettanto semplice per tutti.

Il secondo approccio offre ai tuoi utenti un'esperienza uniforme all'accesso. Fornisce anche una scelta di accesso, nel caso in cui diventino paranoici su Facebook.

    
risposta data 11.02.2015 - 17:23
fonte

Leggi altre domande sui tag