Python 随机丢失的饼干

Python 随机丢失的饼干,python,mongodb,session,heroku,flask,Python,Mongodb,Session,Heroku,Flask,我用flask在heroku上运行了一个网页。它有登记表。在reg I之后生成会话\u id并将其添加到db和会话。然后flask将我重定向到主页。这是家庭代码: @app.route('/home') def home(): if 'session_id' in session: user = db.users.find_one({'session_id':session['session_id']}) if user: retu

我用flask在heroku上运行了一个网页。它有登记表。在reg I之后生成会话\u id并将其添加到db和会话。然后flask将我重定向到主页。这是家庭代码:

@app.route('/home')
def home():
    if 'session_id' in session:
        user = db.users.find_one({'session_id':session['session_id']})
        if user:
            return render_template("home.html", signin=True, username=user['login'], db=db)
        else:
            return "Didn't find user document"
    else:
        return redirect(url_for('login'))
然后,当我开始重新加载页面时,它会随机显示主页或登录页面。如果会话ID匹配,我还可以从登录页面重定向到主页。顺便说一句,它从不显示“未找到用户文档”。问题正在讨论中

@app.route('/login', methods=['POST', 'GET'])
def login():
    if request.method == 'POST':
        login = request.form['login']
        passhash = request.form['hash']
        user = db.users.find_one({'login':login})
        if user:
            if bcrypt.check_password_hash(user['hash'], hashlib.sha512((passhash+user['salt']).encode()).hexdigest().encode()):
                if user['session_id']:
                    # if alredy logged in on another device
                    session['session_id']=user['session_id']
                else:   
                    session_id = binascii.hexlify(os.urandom(32)).decode()
                    session['session_id']=session_id
                    db.users.update_one({'login':user['login']},{'$set': {'session_id':session_id}})
                return "True"
        return "Wrong login/password"

    if 'session_id' in session:
        if db.users.find_one({'session_id':session['session_id']}):
            return redirect(url_for('home'))

return render_template('login.html', title="Sign in")
此func使用onsubmit=“return encrypt()”运行

函数加密(){
var password=$(“#inputPassword”).val();
var hash=CryptoJS.SHA512(密码,{outputLength:256}).toString(CryptoJS.enc.Hex);
$.post(“/login”,({“login”):$('#inputLogin').val(),“hash”:hash}),函数(数据){
如果(数据=='True'){
window.location=“/home”
}否则{
$(“.error”).html(“”+数据+“”)
$(“输入”).val(“”)
}
});
返回false;
}

问题在于密钥使用的是os.Uradom(24)。在我使用heroku配置变量设置静态密钥之后。

粘贴登录视图代码可能会有所帮助。@Doobeh我已经编辑了我的问题
function encrypt(){
      var password = $("#inputPassword").val();
      var hash = CryptoJS.SHA512(password, { outputLength: 256 }).toString(CryptoJS.enc.Hex);
      $.post("/login", ({"login":$('#inputLogin').val(),"hash":hash}), function(data){
        if(data === 'True'){
          window.location = "/home"
        }else{
          $(".error").html('<div class="alert alert-danger" role="alert">'+data+'</div>')
          $("input").val('')
        }
      });
      return false;
    }