current_user.is_authenticated в веб-приложении с колбой не работает согласованно в производстве - PullRequest
0 голосов
/ 07 октября 2019

Я создал базовое веб-приложение, используя Flask. У меня есть обработчик маршрута testlogin в моем run.py (который запускает приложение фляги). Когда я запускаю его на своем локальном хосте, testlogin работает нормально, но когда я размещаю его на сервере Nginx экземпляра AWS EC2 с использованием gunicorn, он не работает согласованно. То есть для приведенного ниже кода я получаю следующие результаты:

Результаты на локальном хосте:

Когда я пытаюсь войти в первый раз, я получаю: Пользователь {username} вошел в систему

Когда я пытаюсь снова войти в систему, я получаю: Вы уже вошли как {username}

Результаты на рабочем сервере:

Когда я пытаюсь войти в систему дляв первый раз я получаю: Пользователь {username} вошел в систему

Когда я пытаюсь войти снова, я получаю: Пользователь {username} вошел в систему (вместо того, чтобы Вы вошли как {username)}) - то есть current_user.is_authenticated терпит неудачу

Снова, когда я пытаюсь, я получаю: вы уже вошли как {uername}

Итак, поведение неоднозначно в нескольких испытаниях.

Все остальные мои веб-страницы работают нормально, кроме этой страницы входа - поэтому я предполагаю, что мой сервер работает без каких-либо проблем. Это случилось на моем веб-сайте, который я запускаю: http://boredmember.in/testlogin Но работает нормально на 127.0.0.1:8000/testlogin

@app.route('/testlogin',methods=['GET','POST'])
def testlogin():
    form=LoginForm()
    if current_user.is_authenticated:
        return f"You are already logged in as {current_user.username}"
    elif request.method=="POST":
        if form.email.data:
            if form.password.data:
                user=User.query.filter_by(email=form.email.data).first()
                if user:
                    if bcrypt.check_password_hash(user.password,form.password.data):
                        if login_user(user):
                            return f"User {current_user.username} loggedin"
                        else:
                            return "User exists but not loggedin"
                        return "User exists and Password Matches"
                    else:
                        return "User exists but Password doesn't match"
                else:
                    return "User Does not exist"
                return f"Password:{form.password.data}"
            else:
                return "Password failed"
            return f"Email: {form.email.data}!"
        else:
            return "Email failed"
        return "POST Verified"
    #return render_template('login.html',title="Home",_external=True,form=form)
    return "GET Verfied"

Такое поведение было замечено раньше? Какие меры предосторожности или меры я должен предпринять?

Я хотел бы иметь последовательное поведение на производстве и локальном хосте ... Что мне делать?

...