使用信号量实现注册时密码加密,但是,修改密码则是明文
来源:7-13 django信号量实现用户密码修改
两努
2020-02-27
使用信号量实现注册时密码加密,但是,修改密码则是明文
修改密码,
登陆后,通过 api = http://0.0.0.0:8000/users/1/
进行修改密码
修改密码后,密码是明文。如果把修改的密码设置成加密的?
3回答
-
bobby
2020-03-02
你可以看看这个 用户的密码设置比较特殊 需要调用 set_password方法才能做到 https://blog.csdn.net/weixin_44786530/article/details/95898986 但是这个文档中使用的是apiview,你可以:
将def perform_update(self, serializer): return serializer.save()
self.perform_update(serializer) 改成 user = self.perform_update(serializer)
user.set_password(xxx) 这里的xxx需要从原始的request.data中去获取新密码
00 -
两努
提问者
2020-02-29
在 views.py 中
class UserViewset(mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
"""
用户
"""
serializer_class = UserRegSerializer
queryset = User.objects.all()
authentication_classes = (JSONWebTokenAuthentication, authentication.SessionAuthentication)
# 用户注册
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = self.perform_create(serializer)
re_dict = serializer.data
payload = jwt_payload_handler(user)
re_dict["token"] = jwt_encode_handler(payload)
re_dict["name"] = user.name if user.name else user.username
headers = self.get_success_headers(serializer.data)
return Response(re_dict, status=status.HTTP_201_CREATED, headers=headers)
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
if getattr(instance, '_prefetched_objects_cache', None):
# If 'prefetch_related' has been applied to a queryset, we need to
# forcibly invalidate the prefetch cache on the instance.
instance._prefetched_objects_cache = {}
return Response(serializer.data)
def perform_update(self, serializer):
serializer.save()
def partial_update(self, request, *args, **kwargs):
kwargs['partial'] = True
return self.update(request, *args, **kwargs)
# 用户信息获取,传入任何一个数,都会返回用户 id,怎么传?
def get_object(self):
return self.request.user
def perform_create(self, serializer):
return serializer.save()通过登陆访问http://0.0.0.0:8000/users/1/
然后部分更新数据,把密码传过去。然后就以明文的方式直接覆盖密码了。
00 -
bobby
2020-02-29
修改密码你是怎么修改的?通过什么修改的?
00
Python前后端分离开发Vue+Django REST framework实战
2906 学习 · 2491 问题
相似问题