Авторизация пользователя по IP Адресу в Django?

Есть модернизированная модель пользователя : model.py
class CustomUser(AbstractUser):
    email = models.EmailField(max_length=200, blank=True, verbose_name='Почта')
    ip_address = models.GenericIPAddressField(blank=True, null=True, verbose_name='Внутренний IP')
    members = models.ManyToManyField('CustomGroup', db_table='slug', blank=True, verbose_name='Группы', related_name='groups')
    dvr = models.BooleanField(default=False, verbose_name='Доступ к архиву')
    update_cam = models.BooleanField(default=False, verbose_name='Редактирование камер')

Туда добавлены поля ip_address , dvr , update_cam ...
проверяю ip пользователя на определенной странице
def home(request):
    
    list_cameras = Cameras.objects.all()
    context = {
        'list_cameras':list_cameras
    }
    template = 'test.html'
    
    def get_client_ip(request):
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR')
        return ip
    ip = get_client_ip(request)
    print(ip)

    list_users = CustomUser.objects.values('username', 'ip_address', 'password') #<--- на это можно не смотреть 

    print(list_users)

    return render(request, template, context)


Как сделать так , что бы Python проверял есть ли у кого то из пользователей полученый ip адресс и автоматически его авторизовал?
Python 3 , Django 2.2.14
  • Вопрос задан
  • 348 просмотров
Решения вопроса 1
Mi11er
@Mi11er
A human...
Импорт логина
J = user ( в вашем случае, получаем юзера по IP )
Логиним...

from django.contrib.auth import login
....

login(request, j)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Skandalist Автор вопроса
def home(request):
    
    list_cameras = Cameras.objects.all()
    context = {
        'list_cameras':list_cameras
    }
    template = 'index.html'

    def get_client_ip(request):
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR')
        return ip
    
# Забираем IP клиента
    if request.user == AnonymousUser():
        try:
            ip = get_client_ip(request)
            print(ip)
            user = CustomUser.objects.get(ip_address=ip) #<-- Проверяет входит ли ip тот что мы получили
            login(request,user)
            print(user)
            return render(request, template, context)
        except ObjectDoesNotExist:
            print('Ошибка ! Пользователя с таким IP нет ')
            return render(request, template, context)
    else:
        return render(request, template, context)

Вот решение рабочее! Работает только на домашней странице
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы