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;
}
ログインビューコードも貼り付けると便利です。 – Doobeh
@Doobeh私の質問を編集しました –