问题描述
我正在尝试通过基于 FastAPI
的后端服务器创建身份验证系统。
但是我目前在尝试登录用户时遇到 bcrypt 问题,用户在 post 调用中发送的散列密码永远不会等于存储在数据库中的密码。
这是我用来注册用户的代码:
@app.put('/users')
def createuser(user: createuser):
salt = bcrypt.gensalt()
hashed = bcrypt.hashpw(user.password.encode('utf-8'),salt)
if dbUser.find_one({"username":user.username}) is None:
user.password = hashed.decode('utf-8')
print(user)
dbUser.insert_one(bson.son.soN(user))
return {"message":"success"}
else:
return {"error":"user already exists!"}
关于保存新的 user.password
。 hashed.decode('utf-8')
帮助我在数据库中保存一个普通字符串,而不是通过执行 " u'hashed_string' "
或 str(hashed)
获得的 Binary("hashed_string",0)
,我通过将 user.password 保存为 {{1 }} 没有 str 或解码。
hashed
我正在比较 dbPassowrd 编码,因为它是一个字符串,所以它会变成 @app.post('/users')
def loginUser(user: loginUser):
if dbUser.find_one({"username":user.username}) is None:
return {"error":"user not found"}
else:
salt = bcrypt.gensalt()
hashed = bcrypt.hashpw(user.password.encode('utf-8'),salt)
dbPassword = dbUser.find_one({"username":user.username})['password'].encode('utf-8')
if bcrypt.checkpw(dbPassword,hashed):
return {"message":"success!"}
else:
print("does not match")
return {"message":"wrong password!"}
和在 post 调用中发送的散列和编码的密码,这将是 u'hashed_password'
问题是用户发送的密码,经过加密和编码后,不等于数据库中的密码。我做错了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)