Несколько пользователей могут войти в одну учетную запись, используя свои собственные учетные данные в платформе django

Предположим, что существует Пользователь-А : userA@gmail.com из организации XYZ. Пользователь-A может войти в систему, используя свои учетные данные (имя пользователя и пароль). После этого на его имя пользователя (имя пользователя совпадает с электронной почтой) отправляется OTP, и как только OTP будет подтвержден, он сможет войти на платформу. Теперь предположим, что пользователь-A работает в команде из 3 человек (пользователь-B, пользователь-C и пользователь-D), и он хочет, чтобы его товарищи по команде вошли на платформу, но используя свои собственные учетные данные, но на той же платформе, содержащей информацию пользователя-A. Таким образом, пользователю-A не придется снова и снова предоставлять OTP своим товарищам по команде, а другие пользователи смогут получить доступ к платформе, используя свой email и OTP.

Пример: Пользователь-B входит на платформу, используя userB@gmail.com (отправлен OTP). После проверки OTP, вошел в систему userA@gmail.com, не запрашивая OTP у пользователя-A.

Как я могу это реализовать?

Ниже представлен model.py

class Customer(models.Model):
    user = models.OneToOneField(User, null=True, blank =True, on_delete=models.CASCADE)
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    name = models.CharField(max_length=200, null=True)
    first_name = models.CharField(max_length=200, null=True)
    last_name = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200, unique=True)
    phone = models.CharField(max_length=200, null=True)
    platformLogo= models.ImageField(upload_to=upload_path, default='logo.png', null=True, blank=False)

Вот мой forms.py

from django.forms import ModelForm
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .models import Customer
from django import forms


class CustomerForm(ModelForm):
    class Meta:
        model = Customer
        fields  = '__all__'
        exclude = ['user', 'email','name','otp_code']


class CreateUserForm(UserCreationForm):
    class Meta:
        model = User
        fields  = ['username','first_name','last_name', 'email', 'password1', 'password2']

Вот мой views.py

def loginUser(request): 
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        try:
            user = authenticate(username=username, password=password)
            if user is not None:
                user = User.objects.get(username=username)
                otp= random.randrange(100000,999999)
                user.customer.otp_code = otp
                user.customer.save()
                request.session['username'] = username
                body = f"Dear {username}, your OTP for login is {otp}. Use this OTP to validate your login."
                send_mail('OTP request',body,'email@gmail.com',[username], fail_silently=False)
                messages.success(request, "Your OTP has been send to your email.")
                return redirect("/otp_verification")
            else:
                messages.error(request, "Wrong Credentials!!")
                return render(request,'login.html')
        except:
            messages.error(request, "Please enter email and password for login!")
            return render(request,'login.html')
    context={}    
    return render(request, "login.html", context)



def otp_verification(request):
    username = request.session['username']
    if request.method == "POST":
        otp = request.POST.get('username')
        user = User.objects.filter(username = username).first()
        if otp == user.customer.otp_code:
            messages.success(request, "OTP Success. Please login with your credentials!")
            login(request, user)
            messages.success(request, f' Wecome {username}')
            return redirect("/")
        else:
            messages.error(request, "Wrong OTP!!")
    return render(request, "otpVerification.html")
Вернуться на верх