Как я могу предотвратить прямой доступ к конечной точке, только перенаправление может получить доступ, а не пользователь?
Я создаю сайт, на котором после регистрации происходит перенаправление на OTP endpoint
.
Я не хочу, чтобы этот URL был доступен пользователю напрямую. Я хочу, чтобы он был доступен только тогда, когда функция, например, signup, перенаправляет к этой конечной точке.
Как я могу это сделать?
Вот мой код
Forms.py
class OTP_Form(forms.ModelForm):
class Meta:
model = OTP
fields = ("otp", )
otp = forms.CharField(label="Enter your OTP", required=True,
widget=forms.PasswordInput(attrs={'placeholder': 'e.g. 123456'}))
Вот вид для ОТП
def phone_verification(request):
try:
if request.method == "POST":
otp = request.session.get('otp')
username = request.session.get('username')
first_name = request.session.get('first_name')
last_name = request.session.get('last_name')
email = request.session.get('email')
password = request.session.get('password')
phone = request.session.get('phone')
age = request.session.get('age')
otp_form = OTP_Form(request.POST)
if otp_form.is_valid():
get_otp = otp_form.cleaned_data['otp']
if get_otp == otp:
user = User.objects.create_user(username=username, email=email, password=password,
first_name=first_name, last_name=last_name, last_login=str(datetime.now(pytz.timezone('Asia/Karachi'))))
customer = Customer.objects.create(
user=user, phone=phone, age=age)
user.save()
customer.save()
otp_entry = OTP.objects.create(phone=phone, otp=otp)
otp_entry.save()
messages.success(request, 'Your account has been creaated')
return redirect('login')
else:
messages.error(request, 'Incorrect OTP')
return redirect('otp')
else:
messages.error(request, 'Please enter the OTP again')
return redirect('otp')
else:
otp_form = OTP_Form()
return render(request, 'otp.html', {'otp_form': otp_form})
except:
return ValidationError("An error occured while verifyig otp")
Вашим аутентифицированным пользователям не нужно это представление, поэтому напишите это в представлении:
def phone_verification(request):
if request.user.is_authenticated:
redirect('home')
else:
#your staffs
...