[英]PyMongo how to access hashed password without username
我正在关注( https://github.com/ravi-sharma/flask-mongo/blob/master/app.py )这是我制作的登录页面的示例,但我卡住了。 这是他使用的代码,我无法修改以适应我试图做的事情:
@app.route('/signin', methods=['GET', 'POST'])
def signin():
if request.method == 'POST':
users = mongo.db.users
signin_user = users.find_one({'username': request.form['username']})
if signin_user:
if bcrypt.hashpw(request.form['password'].encode('utf-8'), signin_user['password'].encode('utf-8')) == \
signin_user['password'].encode('utf-8'):
session['username'] = request.form['username']
return redirect(url_for('index'))
flash('Username and password combination is wrong')
return render_template('signin.html')
return render_template('signin.html')
在该版本的代码中,他使用用户名从 mongodb 访问数据,然后将请求表单密码与数据库中的密码进行比较。 我试图完成的是类似的事情,但使用令牌,而不是用户/通行证。 我遇到的问题是,如果没有用户名,我如何访问令牌?,以及如何将密码请求表与集合中的文档进行比较。 继承人什么我试过:
def account_login():
try:
if request.method == 'POST':
tokens_collection = mongo.db.user_tokens
user_login = tokens.find_one({'tokens': request.form['token']})
if user_login:
if bcrypt.hashpw(request.form['token'].encode('utf-8'), user_login['token']) == user_login['token']:
session['token'] = request.form['token']
return redirect(url_for("account"))
flash('Token was incorrect, something went wrong')
return redirect(url_for("account"))
return redirect(url_for("account"))
except Exception as e:
print(f"account login error: {e}")
它不起作用的原因是因为用户输入的值和数据库中的值不同,idk 如何比较它们以从 if user_login 中获得 True 值。 如果这需要更多说明,请让我知道,提前致谢!
我最终只是没有散列令牌,现在工作正常。 我认为问题是由于某种原因,散列密码作为二进制文件上传到 mongodb,所以我无法将它与令牌的散列版本匹配。 我不知道如何将它从二进制转换为哈希。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.