Не удается получить доступ к Flask -Login current_user после перенаправления от обратного вызова поставщика OpenID connect - PullRequest
1 голос
/ 29 апреля 2020

Я использую провайдера openID для аутентификации пользователей моего flask приложения. После аутентификации на веб-сайте аутентификации провайдер отправляет моей конечной точке обратного вызова id_token, несущий информацию о пользователе, как запрос POST.

Я декодирую этот токен, создаю объект пользователя и сохраняю его в кеше. После сохранения пользователя, пользователь вошел в систему с помощью flask_login.login_user(), функция перенаправляет на домашнюю страницу

@app.route("/opentoken", methods=['POST'])
def openid_callback():
    token = request.form['id_token']
    decoded_token = jwt.decode(token, verify=False)
    preferred_username = decoded_token['preferred_username']
    user = save_user(preferred_username, decoded_token)
    login_user(user)
    log.info(current_user) #That confirms the current_user has the user info
    return redirect('/home')

Ожидаемое поведение состоит в том, что при перенаправлении домашняя конечная точка будет иметь доступ к flask_login.current_user. Это должно произойти, потому что интеграция flask -login должна заставить flask вызывать эту функцию перед каждым запросом.

@app.login_manager.user_loader
def load_user(_id):
  try:
    user = users[_id]
    return user
  except KeyError:
    return None

Однако реальное поведение отличается. Вызываемая конечная точка /home не может получить доступ к current_user после перенаправления

@home_bp.route('/home')
def home():
    print(f"Current User: {current_user}") #This returns that the user is AnonymousMixin
    return render_template(....)

Тем не менее, если страница обновляется (конечная точка вызывается напрямую), она может выбрать current_user и печатает информацию вошедшего в систему пользователя.

Другими словами, при перенаправлении обратный вызов login_manager.user_loader flask -login не вызывается, но вызывается как обычно, когда конечная точка вызывается напрямую.

Я не уверен если я что-то пропустил или неправильно понял, или есть специфическая ошибка, вызывающая такое поведение.

...