python - 密码永远无效 - Django
问题描述
所以我正在尝试为 API 构建自定义登录功能,我正在尝试使用令牌来实现这一点,但我遇到了一些问题。它总是说密码无效,因此即使密码有效,密码有效条件也永远不会因为某种原因变为真,这是我的代码:
class UserTokenHandler(APIView):
def get(self, request, format=None):
username = request.GET['username']
password = request.GET['password']
user = User.objects.filter(username=username)
if user.exists():
if User.objects.get(username=username).password == password:
chosen_token = ''
for i in range(20):
lower_case = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
numbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
upper_case = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
random_choice = random.randint(1,3)
if random_choice == 1:
chosen_token += lower_case[random.randint(0, len(list) -1)]
elif random_choice == 2:
chosen_token += numbers[random.randint(0, len(list) -1)]
elif random_choice == 3:
chosen_token += upper_case[random.randint(0, len(list) -1)]
token = UserLogin.objects.create(token=chosen_token, user=user)
token.save()
print(password)
print(username)
return Response({'Token': chosen_token})
else:
print(password)
print(username)
return Response({'Error':'Invalid Password'})
解决方案
您应该使用 check_password 方法来检查密码,因为密码是加密的
注意:密码等重要信息最好使用 POST 方法,因为 GET 方法会在 URL 中显示密码
class UserTokenHandler(APIView):
def get(self, request, format=None):
username = request.GET['username']
password = request.GET['password']
user = User.objects.filter(username=username)
if user.exists():
if User.objects.get(username=username).check_password(password):
chosen_token = ''
for i in range(20):
lower_case = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
numbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
upper_case = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
random_choice = random.randint(1,3)
if random_choice == 1:
chosen_token += lower_case[random.randint(0, len(list) -1)]
elif random_choice == 2:
chosen_token += numbers[random.randint(0, len(list) -1)]
elif random_choice == 3:
chosen_token += upper_case[random.randint(0, len(list) -1)]
token = UserLogin.objects.create(token=chosen_token, user=user)
token.save()
print(password)
print(username)
return Response({'Token': chosen_token})
else:
print(password)
print(username)
return Response({'Error':'Invalid Password'})
推荐阅读
- python - 我如何允许在 python tkinter 的任何地方使用函数?
- python-3.x - 如何显示无效输入
- c++ - 求所有整数 1 到 N 的最大奇数之和
- javascript - 如何确保 .map 在返回之前完成。(我仍然对承诺有所了解)
- r - R中跨多个列的简洁子集
- python - 入口点子组的 Python 包发现
- pyspark - 在 pyspark 中检查零和空值无法正常工作
- c# - 使用 pulumi 运行 EF Core 迁移
- angular - 如何从 Observable 中获取数据并将其放入 Angular 数组中
- java - 如何识别文件在哪个存储设备中