Никогда не более 3 человек, связанных с тем же логином с Django - PullRequest
1 голос
/ 09 сентября 2009

Давайте представим сервис на платформе django, который ежемесячно выставляет счет своим клиентам. Владелец не хочет, чтобы его клиенты делили счет с людьми, которые не платили. Конечно, он понимает, что некоторые могут захотеть работать совместно над учетной записью и не хотят ограничивать использование общих учетных записей одним и тем же IP-адресом.

Как бы вы позволили входу в систему с тем же именем пользователя / паролем не более 3 человек одновременно с django?

Я думал о реализации счетчика в классе User, но на самом деле не знаю, насколько хороша эта идея.

E.G:

Павел входит в систему, используя

Бонусный вопрос: какие проблемы могут возникнуть при многократном входе в систему и какие меры следует предпринять, чтобы избежать конфликтов между пользователями учетной записи.

1 Ответ

3 голосов
/ 09 сентября 2009

Вы можете использовать куки и хранить GUID внутри этого куки. Если у пользователя нет GUID, дайте ему новый. В противном случае, проверьте GUID в его куки-файле с тем, что в вашей базе данных. Если это один из трех последних назначенных идентификаторов GUID, то он действителен.

Пример: Пользователь входит в систему, получает GUID A. Очищает куки. Вход снова, получает GUID B. Очищает куки. Вход снова, получает GUID C. Снова очищает куки. Вход снова, получает GUID D. Все действует. Он мог бы даже войти снова с существующим файлом cookie, содержащим GUID B или C, но если он посещает с GUID A, то он, вероятно, разделяет учетную запись. (Или используя четыре или более веб-браузера.)

Пример 2: Пользователь 1 входит в систему, получает GUID A. Пользователь 2 входит в систему, получает GUID B. Пользователь 3 входит в систему, получает GUID C. Пользователь 4 входит в систему, получает GUID D. В этот момент GUID A станет недействительным, и вы нажмете наш пользователь 1.

Для этого все, что вам нужно, это отслеживать три самых последних GUID, которые вы присвоили пользователю, заменяя самый старый из них новым GUID всякий раз, когда пользователь очистил свой cookie. Если вы проверяете это при каждом веб-запросе, вы фактически блокируете каждого четвертого (и более) пользователя.

...