我有这段代码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!'
,则所有工作都可以正常运行!我做错了什么?
感谢。
EDIT 解决问题。
替换
if session.get('logged_in') != hash:
上
if session.get('logged_in') != hash and request.endpoint != 'login':
答案 0 :(得分:1)
我不是烧瓶专家。但显然您在请求被映射到处理程序之前使用信号来检查凭据然后重定向到处理程序。但反过来重定向将触发对您的应用程序的另一个请求并再次调用相同的函数,将您发送到无限重定向循环。 (错误302是针对此情况的特定http错误)
我的建议:根据每个处理程序函数检查凭据,或者至少对before_request函数执行一个例外,当发生对“login /”的请求时,它不会被调用。
可能也可以直接调用处理 login /
的函数