我在我的應用程序中使用Flask登錄的@login_required
裝飾器的一些路線。在未登錄的情況下導航到這些路線時,我被重定向到登錄頁面。到現在爲止還挺好。login_required編碼的下一個參數,重定向失敗
重定向的URL看起來是這樣的:/login?next=%2Fusers
看起來它的URL編碼的下一個參數,這是我沒有在我已經運行在整個實施例中看到。登錄後重定向回到next
總是失敗並回退到索引頁面。我認爲這是因爲next
是網址編碼的。
我應該以這種不同的方式進行研究嗎?我只是開始深入Flask框架並開始使用示例,所以我不太瞭解執行任務的最佳方法。
下面是一個例子路線:
login_manager.login_view = 'login'
@app.route('users')
@login_required
def users():
return 'Test'
我的登錄路由看起來是這樣的:在您的幫助
@app.route('/login')
def login():
error = None
next = request.args.get('next')
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if authenticate_user(username, password):
user = User.query.filter_by(username=username).first()
if login_user(user):
flash("You have logged in")
session['logged_in'] = True
return redirect(next or url_for('index', error=error))
error = "Login failed"
return render_template('login.html', login=True, next=next, error=error)
感謝。
注意,這暴露了一個安全漏洞:如果我送你像'/登錄下一=的http%3A%的鏈接? 2F%2Fbadsite.com%2F',您將在登錄後將用戶重定向到該外部頁面,這將要求他們「重新登錄」並獲取其密碼。令人遺憾的是,當談到認證和類似的樣板代碼時,Flask真的很缺乏。 – Blender
是的,檢查是否也在待辦事項列表中,我現在只是在處理嬰兒的步驟。 –
真正的問題是表單模板的操作字段。它看起來像重定向處理編碼路徑沒有任何問題。 –