Domanda

Molto tempo fa mi sono imbattuto in un sito web (io purtroppo perso l'indirizzo, è stato una sorta di sito di giornale) che vi ha permesso di fare uso di tutto come se tu fossi un utente registrato. Si potrebbe valutare, preferita e commentare gli articoli, e quando avete fatto sarebbe visualizzare un, messaggio discreto incorporato dicendo che doveva registrarsi al sito per i vostri contributi siano salvati. Poi ha avuto il link per voi a vedere come il vostro profilo potrebbe apparire come se l'avete fatto, e sono rimasto sorpreso di vedere che aveva tutta la mia attività di lì; gli articoli che ho letto e salvato, commenti, ecc ho lasciato il sito e quando sono tornato in un secondo momento solo per curiosità, aveva ancora la mia attività salvato.

Ho pensato che fosse la cosa più grande mai, e ora che io sono nel processo di costruzione di un sito web con caratteristiche sociali, vorrei prendere questo approccio pure. Ma io sono ancora praticamente un noob e così non ho molta idea di come andare a questo proposito. Come lo faresti?

È stato utile?

Soluzione

Vorrei creare un modello Profile che viene creata automaticamente per ogni utente che visita il tuo sito e aggiunge il primo favorito, tempi la prima voce, ecc Profile deve essere salvato al database tra cui una stringa opportunamente casuale e unica. Questa stringa può essere memorizzato come un cookie sul lato client, e verrà utilizzato in seguito per recuperare il tuo profilo. Dovrebbe essere casuale e abbastanza a lungo in modo che non si può facilmente manipolare il cookie e ottenere profili di altre persone anonime, ma questo non è del tutto evitabile (quindi attenzione si memorizzano i dati sensibili nei profili anonimi!).

Una volta che un utente si registra, è possibile associare il loro Profile con il loro nuovo record di User e rimuovere il cookie e l'identificatore stringa univoca. È ora possibile semplicemente recuperare i loro profili, quando il log-in, in base alla loro record User.

Il modello Profile può contenere tutte le informazioni che si desidera memorizzare.

Se si vuole distinguere tra gli utenti registrati e gli utenti anonimi, è possibile creare un modello AnonymousProfile e un modello Profile (ciascuno con differenti attributi), e semplicemente copiare tutti i dati dal profilo anonimo al profilo utente quando qualcuno registra.

Aggiornamento: In tutta l'applicazione si può decidere di utilizzare queste informazioni quando un utente è connesso Si potrebbe definire un before_filter che afferra l'utente corrente, e solo se v'è un vero utente registrato, si usa i dati del profilo:.

class ApplicationController < ActionController::Base
  before_filter :fetch_user_data

  def fetch_user_data
    @current_user = ... # Work your magic to get current user
  end

  private

  def current_profile
    @current_user and @current_user.profile  # Use profile association
  end
end

Da qualche parte in un'azione di controllo:

if current_profile
  # Do stuff with current_profile
  # Only available to registered users...
end

È possibile modificare in seguito la realizzazione di current_profile se si cambia idea e si desidera profili anonimi hanno effetto per gli utenti anonimi.

Altri suggerimenti

L'unico modo per identificare gli utenti è quello di utilizzare i cookie. Quello che il sito si sta utilizzando è probabilmente facendo è:

Per un utente prima volta creare una voce nella tabella 'utenti' e aggiungerli al gruppo 'ospiti'. Salvare giù un cookie identificativo per la macchina degli utenti in modo da poterli guardare in alto più tardi.

Se l'utente decide di iscriversi è possibile compilare il resto della loro dettagli nella tabella utente (si potrebbe anche voler avere una tabella separata per i dati dell'utente e dettagli di registrazione come nome utente / password, ecc ...) e aggiungerli al gruppo di utenti registrati.

Il modo di gestire i gruppi può essere semplice come una bandiera nel database.

Questa è una domanda rotaie ...

Io probabilmente gestire la maggior parte di questo in un before_filter nel vostro application_controller.rb. I passi sarebbe qualcosa di simile:

if has_cookie
   @user = lookup_user
else
   @user = create_new_guest_user
end

Si potrebbe molto facilmente estendere uno dei quadri di autenticazione esistenti come acts_as_authenticated o spazio per fare questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top