Почему мой код пропускает мою страницу индекса?

Всякий раз, когда я захожу на сайт входа (0.0.0.0:5000/), страница немедленно возвращается к 0.0.0.0:5000/admin. Любые идеи о том, почему это происходит?

работает через Yocto на Intel Edison. редактирование через замазку

@app.errorhandler(404)
@app.errorhandler(500)
def errorpage(e):
    return render_template('404.html')

def login_required(f):
    @wraps(f)
    def wrap(*args, **kwargs):
        if 'logged_in' in session:
            return f(*args, **kwargs)
        else:
            flash('please login first.')
            return redirect (url_for('index'))
    return wrap

@app.route('/', methods=['GET','POST'])
def index():
    error = None
    if  request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'password':
            error = 'invalid attempt.'

    else:
        session['logged_in'] = True
        return redirect(url_for('admin'))
    return render_template('index.html', error = error)

@app.route('/logout')
def logout():
    session.pop('logged_in', None)
    return render_template('/logout.html')

@app.route('/admin',methods=['GET','POST'])
@login_required
def admin():

1 ответ

Решение

Похоже, как только кто-то попадает на страницу с GETэто установлено как logged_in = True и перенаправляет на /admin

@app.route('/', methods=['GET','POST'])
def index():
    error = None
    if  request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'password':
            error = 'invalid attempt.'

    else: # this is always triggered for GETs, even if not logged in!
        session['logged_in'] = True
        return redirect(url_for('admin'))
    return render_template('index.html', error = error)

Вместо этого вы должны проверить, что они уже вошли в систему, и установить logged_in недвижимость в POST вместо этого, после проверки учетных данных.

На самом деле, похоже, что ваш отступ else блок:

@app.route('/', methods=['GET','POST'])
def index():
    error = None
    if  request.method == 'POST':
        if request.form['username'] != 'admin' or request.form['password'] != 'password':
            error = 'invalid'
        else: # this indenting should work now
            session['logged_in'] = True
            return redirect(url_for('admin'))

    return render_template('index.html', error = error)
Другие вопросы по тегам