繁体   English   中英

PyMongo 如何在没有用户名的情况下访问散列密码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM