Come fa Facebook a consentire a un utente sessioni illimitate?

0

Potrei accedere tramite il sito web, l'app per android, l'app per iOS, i browser su dispositivi mobili e quando esco da uno, non mi disconnette da tutti. Tradizionalmente, si disconnetteva da tutti i servizi contemporaneamente perché il tuo auth_token sarebbe stato impostato su null nel DB. Detto questo, non vedo un modo per farlo attraverso Rails e Devise.

Ho solo due soluzioni finora.

Il primo consiste nel disporre di token di sessione separati e di capire quale utilizzare in base a un'intestazione. Tuttavia, se si desidera un numero illimitato di sessioni, è necessario un ID univoco da seguire. Non sono sicuro di come lo otterresti.

La seconda soluzione è quella di avere un contatore nel database chiamato sessioni. Tiene traccia di quante sessioni hai attualmente effettuato l'accesso. Se ho effettuato l'accesso tramite il sito Web, l'app per Android e l'app per iOS, sarebbe 3. Ogni volta che hai più di 1 sessione aperte e disconnesse, il numero di le sessioni sarebbero state decrementate. Se il numero di sessioni diventa 0, impostiamo auth_token su null nel DB (nil in Ruby).

L'unico loop-hole che ho visto in questo è che se qualcuno si disconnette, è ancora connesso su qualche altra piattaforma, ed è esperto di codice, potrebbero trovare il auth_token tramite richieste precedenti sul proprio browser. Quindi, potrebbero inviarlo e continuare a utilizzarlo anche se sono stati scollegati tecnicamente. Non vedo necessariamente un problema con questo, ma non so se questo è un buon modo per farlo.

Qualcun altro ha un buon suggerimento? C'è un posto migliore per postare questo?

    
posta David 01.09.2014 - 23:03
fonte

2 risposte

4

Un modo per implementare questo sarebbe mantenere un token di autenticazione separato per ogni sessione del browser, invece di un token di autenticazione condiviso. È possibile memorizzarlo in un cookie del browser, che è ovviamente specifico per quel browser, e selezionando l'opzione "disconnessione" si cancellerebbe quel cookie del browser (e lo si rimuoverà dal database). Anche se qualcuno dovesse trovare un auth_token da richieste precedenti per un browser specifico, non funzionerebbe dopo che quella sessione è stata rimossa dal database del server.

Quindi, risposta breve, usa un token di autenticazione per browser invece di uno per account utente. Il modo in cui lo implementate nel vostro framework web sul lato server dipende da voi.

    
risposta data 01.09.2014 - 23:18
fonte
1

Ogni volta che accedi da un dispositivo, crei una sessione univoca presumibilmente con un cookie di autenticazione univoco. Questa sessione / autorizzazione è solo per quel dispositivo, ma, in genere, ti sono consentiti altri accessi e sessioni da altri dispositivi in parallelo.

Non ho motivo per cui ritieni che questo non sia il comportamento "normale" come il modo in cui Google, StackOverflow e altri siti possono gestire gli accessi e le autenticazioni.

Questo significa che posso mantenere il mio smartphone connesso a google inalterato accedendo e firmando sul mio PC.

    
risposta data 02.09.2014 - 04:02
fonte

Leggi altre domande sui tag