07.手机号登录接口
分析
只需要手机号和验证码,post
后端
views.py
@action(methods=['POST'], detail=False)
def login_phone(self, request, *args, **kwargs):
ser = UserPhoneModelSerializer(data=request.data)
ser.is_valid(raise_exception=True)
token = ser.context['token']
user = ser.context['user']
return APIResponse(token=token, username=user.username, id=user.id)
serializer.py
from django.core.cache import cache
from django.conf import settings
class UserPhoneModelSerializer(serializers.ModelSerializer):
code = serializers.CharField()
mobile = serializers.CharField(max_length=11)
class Meta:
model = models.User
fields = ['mobile', 'code']
def validate(self, attrs):
mobile = attrs.get('mobile')
code = attrs.get('code')
cache_code = cache.get(settings.SMS_PHONE_CACHE % mobile)
if cache_code and cache_code == code:
user = models.User.objects.get(mobile=mobile)
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
self.context['token'] = token
self.context['user'] = user
return attrs
else:
raise ValidationError('验证码错误')