Pergunta

Vamos imaginar um serviço alimentado por django que cobre seus clientes mensalmente. O proprietário não quer que seus clientes compartilhem a conta com pessoas que não pagaram. Obviamente, ele entende que alguns podem querer trabalhar em colaboração em uma conta e não deseja restringir o uso de contas compartilhadas ao mesmo endereço IP.

Como você deixaria o login, com o mesmo nome de usuário / senha, não mais que três pessoas nos mesmos momentos com o Django?

Eu estava pensando em implementar um contador na classe de usuário, mas realmente não sei o quão boa é essa ideia.

POR EXEMPLO :

Paul faz login usando

Pergunta de bônus: quais problemas o multi login pode implicar e quais medidas devo tomar para evitar conflitos entre os usuários da conta.

Foi útil?

Solução

Você pode usar cookies e armazenar um GUID dentro deste cookie. Se um usuário não tiver um GUID, dê a ele um novo. Caso contrário, verifique o GUID em seu cookie com o do seu banco de dados. Se for um dos três GUIDs mais recentemente designados, é o uso válido.

Exemplo: o usuário faz login, recebe o GUID A. limpa os cookies. Faça login novamente, recebe o GUID B. limpa os cookies. Faça login novamente, recebe Guid C. Limpa os cookies novamente. Faça login novamente, recebe Guid D. Todos válidos. Ele poderia até fazer login novamente com um cookie existente que contém o GUID B ou C, mas se ele visitar com Guid A, ele provavelmente está compartilhando a conta. (Ou usando quatro ou mais navegadores da web.)

Exemplo 2: Usuário 1 faz login, Gets GUID A. Usuário 2 logs, Gets GUID B. Usuário 3 logs, Gets GUID C. Usuário 4 logs, recebe Guid D. Nesse momento, Guid a se tornaria inválido e você 'D chutar o usuário 1.

Para fazer isso, tudo o que você precisa é acompanhar os três GUIDs mais recentes que você atribuiu ao usuário, substituindo o mais antigo por um novo GUID sempre que o usuário limpava seu cookie. Se você verificar isso com todas as solicitações da Web, bloqueia efetivamente a cada quarto (e mais) usuário.

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