Несколько пользователей могут войти в одну учетную запись, используя свои собственные учетные данные в платформе 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")