Pergunta

Há muito tempo atrás eu tive um website (I, infelizmente, perdeu o endereço, que era algum tipo de site do jornal) que lhe permitiu fazer uso de tudo como se você fosse um utilizador registado. Você poderia classificar, artigos favoritos e comentar, e quando você fez isso iria exibir um discreto, mensagem incorporada dizendo que você teve que registar no site para as suas contribuições para ser salvo. Em seguida, ele teve o link para que você possa ver como seu perfil olharia como se você fez, e fiquei surpreso ao ver que tinha toda a minha atividade lá; os artigos que li e salvos, comentários, etc. Eu deixei o local e quando eu voltei a ele mais tarde apenas por curiosidade, ele ainda tinha a minha actividade salvo.

Eu pensei que era a melhor coisa do mundo, e agora que eu estou no processo de construção de um site com características sociais, eu gostaria de tomar essa abordagem também. Mas eu ainda sou praticamente um noob e por isso eu não tenho muita idéia de como ir sobre ele. Como você faria isso?

Foi útil?

Solução

Gostaria de criar um modelo Profile que é criado automaticamente para qualquer usuário que visita o seu site e adiciona o primeiro favorito, as taxas do primeiro item, etc. O Profile devem ser salvos em seu banco de dados, incluindo uma seqüência adequadamente aleatório e único. Essa seqüência pode ser armazenada como um cookie no lado do cliente, e será usada mais tarde para recuperar o seu perfil. Ele deve ser aleatória e longo o suficiente para que você não pode facilmente mexer com o seu cookie e obter perfis de outras pessoas anônimas, mas isso não é inteiramente evitáveis ??(por isso tome cuidado que você armazenar nenhum dado sensível em perfis anônimos!).

Uma vez que um usuário se registra, você pode associar sua Profile com o seu novo recorde User e remover o cookie eo identificador de cadeia única. Você pode agora simplesmente recuperar seus perfis quando eles login, com base em seu registro User.

O modelo Profile pode conter alguma informação que você gostaria de loja.

Se você quiser diferenciar entre usuários registrados e usuários anônimos, você pode criar um modelo AnonymousProfile e um modelo Profile (cada um com diferentes atributos), e simplesmente copiar todos os dados do perfil anônimo para o perfil de utilizador quando alguém registros.

Update: Ao longo de sua aplicação, você pode decidir usar apenas essas informações quando um usuário está conectado Você pode definir um before_filter que agarra o usuário atual e somente se houver um usuário real logado, você usa os dados do perfil:.

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

Em algum lugar em uma ação de controlador:

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

Você pode alterar posteriormente a implementação de current_profile se você mudar de idéia e quiser perfis anônimos de ter efeito para os usuários anônimos.

Outras dicas

A única maneira de identificar os usuários é a utilização de cookies. O que o site que você estava usando é provável fazendo é:

Para um usuário de primeira vez criar uma entrada na tabela 'users' e adicioná-los ao grupo 'convidados'. Salvar-se um cookie de identificador para a máquina de usuários para que você possa procurá-los novamente mais tarde.

Se o usuário decide se registrar, você pode preencher o resto de seus detalhes na tabela de usuário (você pode até querer ter uma tabela separada para os detalhes do usuário e detalhes de registro como nome de usuário / senha etc ...) e adicioná-los para o grupo de utilizadores registados.

A maneira como você gerencia seus grupos pode ser tão simples como um sinalizador no banco de dados.

Como este é um trilhos pergunta ...

Eu provavelmente lidar com a maior parte deste em um before_filter em sua application_controller.rb. Os passos seria algo como:

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

Você poderia muito facilmente estender uma das estruturas de autenticação existentes, como acts_as_authenticated ou autorização para fazer isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top