Flask -Вход незарегистрированный пользователь выдает ошибку 500 - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь создать простой сервер входа в систему Flask, следуя примеру кода на github. Он отлично работает для пользователя, который находится в программе, но при вводе неправильного имени пользователя возникает ошибка внутреннего сервера 500. Любые предложения были бы потрясающими :)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if flask.request.method == 'GET':
        return '''
               <form action='login' method='POST'>
                <input type='text' name='email' id='username' placeholder='email'/>
                <input type='password' name='password' id='password' placeholder='password'/>
                <input type='submit' name='submit'/>
               </form>
               '''
               #return render_template('logins.html')
    # if request.method == 'POST':
        # username = request.form['username']
        # password = request.form['password']

    email = flask.request.form['email']
    if flask.request.form['password'] == users[email]['password']:
        user = User()
        user.id = email
        flask_login.login_user(user)
        return flask.redirect(flask.url_for('protected'))
    return 'Bad login'



    Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.5/dist-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.5/dist-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "serv.py", line 65, in login
    if flask.request.form['password'] == users[email]['password']:
KeyError: 's'

1 Ответ

0 голосов
/ 09 мая 2020

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

У меня есть приблизительные предположения, основанные на поведении, которое вы упоминаете. У вас должна быть функция обратного вызова user_loader, которую вы используете, чтобы получить пользователя перед использованием login_user(user). В зависимости от вашей реализации эта функция может загружать пользователя из базы данных или из словаря памяти или списка

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

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

Приведенный выше код обрабатывает исключение и возвращает None в случае, если пользователь не существует. Вот почему flask-login сможет решить НЕ входить в систему вашего пользователя, пока ваша программа не вернет ошибку.

...