флешка-логин: is_authenticated не соответствует - PullRequest
0 голосов
/ 04 июня 2018

У меня сложилось впечатление, что использование is_authenticated из flask_login не работает должным образом.Предоставляя следующие журналы, которые я получаю в своей тестовой среде:

False
2018-06-05 15:20:22,416 - root - INFO - GET - /ngin/api/v2/menu/main? - 200 OK
False
2018-06-05 15:20:45,543 - root - INFO - GET - /ngin/api/v2/menu/lvgo? - 200 OK
False
2018-06-05 15:20:48,605 - root - INFO - GET - /ngin/api/v2/menu/main? - 200 OK
False
2018-06-05 15:20:51,120 - root - INFO - GET - /ngin/api/v2/menu/lpgp? - 200 OK
user_id
True
2018-06-05 15:20:51,219 - root - INFO - GET - /ngin/static/media/ngin_gas.svg? - 200 OK
False
2018-06-05 15:20:52,865 - root - INFO - GET - /ngin/api/v2/menu/main? - 200 OK
False
2018-06-05 15:20:55,173 - root - INFO - GET - /ngin/api/v2/menu/lpgp? - 200 OK
False

Строка журнала с URL-адресом находится в блоке after_request, поэтому печатается в конце.Имя пользователя ('user_id') происходит от login_manager.user_loader;и Истина или Ложь происходят от current_user.is_authenticated.Кажется, что user_loader не всегда вызывается.И когда это происходит, пользователь показывает аутентифицирован, но когда вызов не происходит, is_authenticated возвращает false.

Мой код структурирован так:

class usrmgmr():

  def __init__(self, app):
    self.login_manager = fl.LoginManager()
    self.login_manager.init_app(app)
    self.login_manager.session_protection = 'strong'

    @self.login_manager.user_loader
    def load_user(user_id):
      print(user_id)
      return User(user_id)

  #Function to check if a user is authenticated.
  # returns True or False
  def is_loggedin(self):
    return fl.current_user.is_authenticated

  #only for debug purposes!
  def do_debug_login(self):
    user = User('user_id')
    fl.login_user(user, remember=True, duration=datetime.timedelta(seconds=7200)) 

И этот код используется в run.py:

usrmgmr = login.usrmgmr(app)
@app.before_request
def before_every_request():
  #check if for this endpoint a login is required.
  #if yes, and the user is not logged in, force the login method.
  #else we can just move on. Also the user probably is logged in then.
  if msec.needs_login(page_security):
    print(usrmgmr.is_loggedin())
    if usrmgmr.is_loggedin() == False:
       usrmgmr.do_debug_login()

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

Странно то, что иногда я получаю «True», а иногда - «False».Так что это не кажется очень последовательным.Странно то, что кажется, что он никогда не возвращает True, когда вызывается / ngin / api / v2 / ..., но когда вызывается файл statick, он работает.

Кто-нибудь знает, как это исправить, или в чем причина такого поведения?

...