2015-12-26 7 views
-1

Я пытаюсь понять, почему после входа в систему, как только я перенаправляюсь на другую страницу, отличную от логина, я выхожу из системы. Я не думаю, что ошибка находится в окне входа в систему, я уверен, что это связано с чем-то более тонким. Следующий код в любом случае связан с управлением входами.Я вхожу в систему, и я немедленно вышел из системы. Зачем?

@app.route("/login", methods=["GET", "POST"]) 
def login(): 
form = LoginForm() 

    if form.validate_on_submit(): 
     user = load_user(form.username.data) 
     if user is not None and user.verify_password(form.password.data): 
      if form.remember_me.data == True: 
       login_user(user, remember=True) 
      else: 
       login_user(user) 
      flash('Logged in successfully.') 
      next = request.args.get('next') 
      return redirect(next or url_for('home')) 
     else: 
      flash('Wrong username and/or password') 

    form.username.data = request.args.get('username') 
    return render_template('login.html', form=form, title='Login') 

@lm.user_loader 
def load_user(username): 
    user = User.query.filter_by(username=username) 
    if user.count()!=0 : 
     return user.first() 
    else: 
     return None 

@app.route("/logout") 
@login_required 
def logout(): 
    logout_user() 
    flash('Logged out!') 
    return to_index() 

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

+3

Вы должны быть осторожны с отступом. ваш def logout(), похоже, что он будет выполняться в любое время u load_user() – Busturdust

+0

ваш код выглядит правильно, убедитесь, что ваш отступ верен, как указано @Busturdust – Pradheep

+0

да, вы правы. Во всяком случае, я сделал эту ошибку при публикации кода, так что это не (к сожалению) причина моей проблемы. – Paolo91

ответ

1

Функция user_loader принимает идентификатор, а не имя. Вы сравниваете значение id с столбцом имени пользователя и не получаете никаких результатов. Используйте метод get для запроса User с помощью первичного ключа (id) или возврата None, если не существует пользователя с этим идентификатором.

@login_manager.user_loader 
def user_loader(id): 
    return User.query.get(id) 
+0

Я уже тестировал это. Действительно, я попытался загрузить пользователя без функции user_loader. Проблема все еще существует. Как я уже сказал, логин прошел успешно, пока я не переключу страницу. Я хочу сказать, вместо «return redirect» (next или url_for («home»)). Я оставил строку пустой, чтобы она отображала одну и ту же страницу, и я замечаю, что 'current_user.is_authenticated()', вызываемый внутри шаблона , возвращает 'True'. Хорошо, теперь я хочу посетить мою домашнюю страницу. Я делаю это и ... voilà, я внезапно вышел из системы, 'current_user.is_authenticated()' возвращает 'False'. – Paolo91

+0

Спасибо за ваш совет. Это была проблема. – Paolo91

 Смежные вопросы

  • Нет связанных вопросов^_^