public
Authored by avatar Куц Владимир

Авторизация с помощью remote_user. Связывание с учетками.

Авторизация с помощью remote_user. Связывание с учетками.

settings.py:

...
MIDDLEWARE = [
    ...
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.RemoteUserMiddleware',
    ...
]
...
AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'django.contrib.auth.backends.RemoteUserBackend',
]

users/models.py

from django.db import models
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from django.conf import settings
from django.contrib.auth import get_user_model


class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
    ...

...

@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def assign_to_employee(sender, instance=None, created=False, **kwargs):
    if created:
        employee = Employee.objects.filter(ad_name=instance.username).order_by('id').last()
        if employee and not employee.user:
            employee.user = instance
            employee.save(update_fields=['user'])


@receiver(post_save, sender=Employee)
def employee_assign_user(sender, instance=None, created=False, **kwargs):
    if created:
        user = get_user_model().objects.filter(username=instance.ad_name).order_by('id').last()
        if user and not instance.user:
            instance.user = user
            instance.save(update_fields=['user'])
Edited
  • Clone with SSH
  • Clone with HTTPS
  • snippetfile1.txt 100 B
    0% or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment