2017-01-20 5 views
0

私はフロックを使って英雄のウェブページを運営しています。それは登録フォームを持っています。 reg Iの後にsession_idを生成し、それをdbとsessionに追加します。その後、フラスコが私をホームページにリダイレクトします。ランダムに失われたクッキー

@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')) 

次に、ページをリロードすると、ホームページまたはログインページがランダムに表示されます。また、session_idsが一致すればログインページからホームへのリダイレクトもあります。 Btw、それは "ユーザー文書を見つけられませんでした"を決して表示しません。問題はセッション中です。

@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使用して実行されます "リターン暗号化を()"

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; 
    } 
+0

ログインビューコードも貼り付けると便利です。 – Doobeh

+0

@Doobeh私の質問を編集しました –

答えて

0

問題は、秘密鍵がos.urandom(24)を使用していたということでした。 heroku config varsを使って静的秘密鍵を設定した後。

関連する問題