django - check_password() 返回 False
问题描述
我制作了一个带有自己密码字段的模型。User
这与对象完全分开。我正在django.contrib.auth.hashers
为此使用图书馆。
在此模型的 create 方法中(覆盖通用 CreateListAPI 视图)
def create(self, request, *args, **kwargs):
data = request.data
data['password'] = make_password(data['password'])
serializer = self.get_serializer(data=data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
这会按预期将哈希密码存储在我的数据库中,但是当我尝试使用密码进行身份验证时
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
try:
# Grabs the 'name' parameter from the URL
obj = queryset.get(name=self.kwargs['name'])
except Group.DoesNotExist:
raise Http404
print(self.request.data['password']) # raw password string
print(obj.password) # encoded password from database
if check_password(self.request.data['password']), obj.password):
raise Http404
obj.user_set.add(self.request.user)
self.check_object_permissions(self.request, obj)
return obj
check_password
返回False
。但是,将编码密码作为原始字符串密码传递是有效的。因此,对密码进行哈希处理是有效的,但事后不会将原始密码与其进行比较。
解决方案
if not check_password(self.request.data['password'], obj.password):
raise Http404
将行更改为上面的代码
推荐阅读
- python - 构建 pgs4a 项目时 project.properties 文件中的问题
- c++ - 为什么添加填充可以让你的循环更快?
- ios - 根据 uiLabel 文本更改水平 uicollectionivew 宽度
- wordpress - 提交按钮后运行 SQL
- r - R:如何在第一列中查找值和第三列的总和值
- python - 使用分布式调度程序从索引中提取转换后的列而不会丢失 index.name
- html - 如何停止 CHtmlView 驱动类的点击事件?
- python - Python:连接列表的所有连续子列表,直到满足条件
- sql-server - 计算多边形中折线的长度(TSQL,几何)
- python - Python:将 numpy.array 附加到列表 python 会覆盖以前的元素