2

我有这段代码https://github.com/italomaia/flask-empty/blob/master/src/0.8/main.py我在文件末尾写了这段代码

def configure_before_request(app):
    @app.before_request
    def before_request():
        hash = pbkdf2_sha256.encrypt(app.config['PASSWORD'], rounds=8000, salt_size=10)
        if session.get('logged_in') != hash:
            return redirect(url_for('login'))
def configure_views(app):
    @app.route('/login/', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
            hash = pbkdf2_sha256.encrypt(app.config['PASSWORD'], rounds=8000, salt_size=10)
            if request.form['login'] == app.config['USERNAME'] and pbkdf2_sha256.verify(request.form['password'], hash):
                session['logged_in'] = hash
                return redirect(url_for('index'))
            else:
                flash(u'Неверный логин или пароль')
        return render_template('login.html')

    @app.route('/', methods=['GET', 'POST'])
    def index():
        return 'index_page НАХ.'

如果我运行此代码,我会收到 302 服务器错误(ERR_TOO_MANY_REDIRECTS),但如果我更改此行return redirect(url_for('login')),则return 'Hello!'所有代码都可以正常工作!我做错了什么?

谢谢。

编辑解决方案问题。

更换 if session.get('logged_in') != hash: _ if session.get('logged_in') != hash and request.endpoint != 'login':

4

1 回答 1

1

好吧,我不是烧瓶专家。但显然您在请求被映射到处理程序之前使用信号来检查凭据,然后重定向到处理程序。但是重定向反过来会触发对您的应用程序的另一个请求并再次调用相同的函数,从而使您进入无限重定向循环。(错误 302 是针对这种情况的特定 http 错误)

我的建议:在每个处理函数的基础上检查凭据,或者至少对你的 before_request 函数做一个例外,即当“登录/”请求发生时它不会被调用。

可以直接调用处理登录/的函数

于 2013-03-02T15:21:50.923 回答