У меня хостинг веб-приложения, состоящего из питона и фляги на героку.Я столкнулся с проблемой, когда веб-сайт, кажется, запрашивает вход в систему в произвольные моменты времени, даже входя ранее.
В маршруте my / login я помню, какой пользователь вошел в систему, сохранив пользователя под session["user_id"]
и в своей функции login_required я использую session.get("user_id")
и проверяю, есть ли ее None, чтобы увидеть, следует ли мне перенаправить на логин
Я ввел следующие операторы печати в кодах, чтобы увидеть, что происходит
# Remember which user has logged in
session["user_id"] = rows[0][0]
print(session["user_id"], file=sys.stderr)
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
print(session.get("user_id"), file=sys.stderr)
if session.get("user_id") is None:
return redirect("/login")
return f(*args, **kwargs)
return decorated_function
Я ожидал увидеть 1 для маршрута / login и функции @login_required при входе в систему с учетными данными user_id 1
Однако иногда я получаю 1, 1 и 1, Нет, что в последующем случае страница / login перенаправляет меня на страницу / login.
При нажатии на элементы, которые перенаправляют в @login_required после доступа ("/"), иногда все еще можно перенаправить менядля входа / входа также
Возможно, это как-то связано с SESSION_PERMANENT?Он установлен как False, но я не ожидаю, что он сразу истечет?
Код, который у меня работает, прекрасно работает в CS50 IDE, но почему-то не работает при размещении на heroku?!
Цените любойи всякая помощь, которая может прийти мне на пути.
Привет всем, я изменил некоторые вещи, и они работают лучше, чем раньше, но не оптимально. В маршруте мой / вход в систему я изменил свой статус входа в систему на true через следующий кодsession['logged_in'] = True
В моей функции login_required я изменил на
if 'logged_in' in session:
return f(*args, **kwargs)
else:
return redirect("/login")
В результате этого приглашение на вход в систему происходит намного реже (все еще происходит), и мне приходится входить в систему несколько раз (сохранитьперенаправление обратно в / логин) только для успешного входа в систему. Я, честно говоря, действительно потерял