Como seria um implementar esse tipo de engajamento gradual / preguiçoso inscrição no Rails?
-
06-09-2019 - |
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?
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.