не показывает имя пользователя, который только что вошел в систему, но показывает его изображение профиля - PullRequest
0 голосов
/ 05 августа 2020

Когда пользователь успешно входит в систему, он видит своего рода приветствие со своей картинкой и «Привет, имя пользователя!» текст. Но проблема в том, что иногда он не показывает их имя пользователя (просто «Привет,!»), Но их изображение профиля всегда отображается . Я заставил сценарий JS ждать 200 мс (дал ему время, чтобы передать имя пользователя в div приветствия), но это не решило проблему.

PS Я заметил, что это происходит, когда я вытаскиваю пользователя из сеанс и перезапустите сервер. Если я не перезапускаю сервер, но выхожу из системы и снова вхожу в систему, все в порядке - я вижу свое имя пользователя в приветственном div.

Вот код:

routes. py

loginForm = LoginForm.from_json(req)
   
sql = "SELECT * FROM `users` WHERE `username`=%s"
cur.execute(sql, (loginForm.log_username.data))
row_headers = [x[0] for x in cur.description]
user = cur.fetchone()
       
if user:
    user = dict(zip(row_headers, user))
    
    if bcrypt.check_password_hash(user['password_hash'], loginForm.log_password.data):
        session['username'] = user['username']
        session['picture'] = user['picture']

логин. html

if (response.ok) {
    setTimeout(
        function() {
            go();  // function that shows the greeting div
        }, 200);
} else {

приветствие div в логине. html

<div class="greet">
    <img class="photo rounded-full mx-auto" src="{{ url_for('static', filename=session['picture']) }}" alt="">
    
    <div class="text-center font-medium text-base">
        Hello, {{ session['username'] }}!
    </div>
</div>

1 Ответ

0 голосов
/ 06 августа 2020

Попробуйте это для диагностики:

print(user)
if user:
    user = dict(zip(row_headers, user))
    print(user)
...