Как я могу идентифицировать пользователя без функции входа в Django? - PullRequest
0 голосов
/ 20 февраля 2019

Я создаю приложение Django, где посетители могут отвечать на вопросы без функции входа.Номер каждого ответа будет учитываться как «голоса», но мне нужно ограничить пользователя, который будет отвечать на вопрос только один раз.

Мне нужна чья-то помощь, которая сталкивалась с этим.

Ответы [ 4 ]

0 голосов
/ 20 февраля 2019

хранение токена в браузере пользователя может достичь этого.Я сделал это несколько лет назад, но сохранение других относительных данных докажет точность уникальных пользователей (например, токен + IP).

seen = objects.browser_seen.filter(token=token, news__id=object_id).exists()
if not seen:
    obj = BrowserSeen.objects.create(token=token)
    obj.news_set.add(objects)

, если токен не существует, случайный токен устанавливается на ответ.

0 голосов
/ 20 февраля 2019

Вы можете проверить этот пример по simpleisbetterthancomplex , который объясняет очень хороший этот пример по вашему запросу.Вы можете использовать ip пользователя и сравнивать его каждый раз, когда пользователь загружает ответ, а затем ограничивать пользователя в соответствии с вашими потребностями.Надеюсь, это поможет

0 голосов
/ 20 февраля 2019

Вы можете использовать Django Sessions или попытаться самостоятельно что-то взломать, используя метаданные из каждого запроса.

Сеансы Django

Django обеспечивает полную поддержку анонимных сессий.Инфраструктура сеансов позволяет хранить и извлекать произвольные данные для каждого посетителя сайта.Он хранит данные на стороне сервера и объявляет об отправке и получении файлов cookie.Куки содержат идентификатор сеанса, а не сами данные (если вы не используете бэкэнд на основе куки).

Запрос данных META

В каждом запросе в Django он содержит нечто, называемоеMETA, который содержит метаданные о запросе.В зависимости от того, как вы используете представления Django (представления на основе функций или представления на основе классов), вы получите META немного по-другому.

Объект запроса в Django - это хранилище значений ключей или, по сути, словарь.Так что в функциональном представлении вы бы использовали.Если вы хотите отслеживать IP-адреса, вы можете использовать REMOTE_ADDR внутри META.Однако это не является надежной защитой, поскольку пользователи могут использовать VPN для просмотра с другим IP-адресом.

Представление на основе функций

def my_view(request):
    ip_address = request.META['REMOTE_ADDR']
    # do your stuff

Представление на основе классов

class MyClass(TemplateView):

    def get_context_data(self):
        ip_address = self.request.META['REMOTE_ADDR']
        # do your stuff
        context['ip_address'] = ip_address

Оттам вы можете предоставить более подробную информацию о том, что вы пытаетесь сделать.Но вы должны иметь возможность использовать некоторую комбинацию данных в объекте запроса META, чтобы отслеживать своих пользователей и предоставлять им лучший опыт.

0 голосов
/ 20 февраля 2019

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

ИЛИ между адресом Mac,cookie, и IP - ваш лучший выбор.Запишите все 3 и, если они посещают, и любое из этих совпадений, то предположим, что это один и тот же человек

...