【发布时间】:2023-04-08 20:25:02
【问题描述】:
我在我的 twilio 项目中加入了 OTP。但是在验证电话号码时会引发以下错误。
phone.verified = True
AttributeError: 'str' object has no attribute 'verified'
models.py
class User(AbstractBaseUser, PermissionsMixin):
phone = models.CharField(max_length=15, unique=True)
is_active = models.BooleanField(default = True)
is_staff = models.BooleanField(default = False)
USERNAME_FIELD = 'phone'
key = models.CharField(max_length=100, unique=True, blank=True)
verified = models.BooleanField(default=False)
objects = UserManager()
views.py
@api_view(['GET'])
def send_sms_code(request, format=None):
time_otp = pyotp.TOTP(request.user.key, interval=10000)
time_otp = time_otp.now()
user_phone_number = request.user.phone
client.messages.create(
body="Your verification code is "+time_otp,
from_=twilio_phone,
to=user_phone_number
)
return Response(status=200)
@api_view(['GET'])
def verify_phone(request, sms_code, format=None):
code = int(sms_code)
if request.user.authenticate(code):
phone = request.user.phone
phone.verified = True
phone.save()
return Response(dict(detail = "Phone number verified successfully"),status=201)
return Response(dict(detail='The provided code did not match or has expired'),status=200)
它会向我发送一个验证码,但是当我要验证它时它无法正常工作。我知道问题出在哪里,但我该如何解决?任何帮助,将不胜感激!先谢谢了!
【问题讨论】:
-
是否在用户模型或单独的手机模型上验证?如果是后者,
User模型上的phone应该是 Phone 模型的ForeignKeyField而不是CharField,并且您的代码应该可以工作。如果验证在User模型上,请参阅下面提供的答案。
标签: django python-3.x django-models django-rest-framework