首页 > 解决方案 > “str”对象没有“已验证”属性

问题描述

我在我的 twilio 项目中加入了 OTP。但是在验证电话号码时会引发以下错误。

phone.verified = True
AttributeError: 'str' object has no attribute 'verified'

模型.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()

视图.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)

它向我发送了一个验证码,但是当我要验证它时它无法正常工作。我知道问题出在哪里,但我该如何解决?任何帮助,将不胜感激!预先感谢!

标签: djangopython-3.xdjango-modelsdjango-rest-framework

解决方案


您的 api 视图设置 phone =request.user.phone这是一个字符串。User然后,您可以通过访问其上已验证的属性来将 phone 当作一个对象来使用。相反,您的观点应该是:

@api_view(['GET'])
def verify_phone(request, sms_code, format=None):
  ...
  if request.user.authenticate(code):
    user = request.user # set user as a User object.
    user.verified = True
    user.save()
    return Response(...)
  return Response(...)

看起来您甚至没有使用 phone 变量,因此您实际上并不需要它与您提供给我们的信息。


推荐阅读