2014-10-08 78 views
-1

我正在使用燒瓶。這是我的登錄功能:燒瓶重定向不起作用

@app.route("/", methods=["GET", "POST"]) 
def login(): 
if request.method == "POST" and "imei" in request.form and "password" in request.form: 
    imei = request.form["imei"] 
    password = request.form["password"] 
    worked, name = checkDB(imei, password) 
    if worked: 
     uid = hashlib.sha256(imei.encode('utf-8')).hexdigest() 
     u = User(imei, name, password, uid) 
     USERS[uid] = u 
     login_user(u) 
     #return request.args.get("next") 
     return redirect(url_for("analyzer")) #THIS DOESENT WORK 
    else: 
     return redirect(url_for("login") + "?failure=true") 
elif request.method == "GET" and request.args.get("failure"):  
    return render_template("auth.html", fail="true") 
else: 
    return render_template("auth.html", fail="false") 

當行試圖觸發(標記此DOESENT工作之一),它重定向到:/?next=%2Fwebike%2Fanalyzer

的分析很簡單:

@app.route('/analyzer', methods=['GET']) 
@login_required 
def analyzer(): 
    return render_template('index.html') 

我在做什麼錯?如果用戶名和密碼錯誤,一切都按預期工作。

+0

u.get_id()返回什麼? – dirn 2014-10-09 14:19:04

+0

「login_user」之後,您希望在哪裏看到此運行? – Tommy 2014-10-09 14:31:19

+0

'u = User(imei,name,password,uid)'後。 – dirn 2014-10-09 14:32:04

回答

0

登錄無法正常工作。您成功重定向到/analyzer,但由於裝飾器@login_required,重定向回到您的登錄方法,因此將分析器方法url附加爲next參數。

u = User(imei, name, password, uid) 

在這裏,你不執行查找,你正在做一個新的用戶對象。您不需要創建新對象,而需要從數據庫中獲取用戶,並將傳遞給login_user方法。 Documentation for the method here

+0

該方法說'記錄一個用戶。你應該傳遞實際的用戶對象到這個'。但我正在傳遞實際的用戶對象。我用興奮劑錯了什麼? – Tommy 2014-10-09 00:37:53

+0

「在這裏,你沒有執行查找,而是創建一個新的User對象,而不是創建一個新的對象,而是需要從數據庫獲取用戶並將其傳遞給login_user方法。」看[這個例子](http://flask-login.readthedocs.org/en/latest/#custom-login-using-request-loader)。 – Celeo 2014-10-09 03:04:09

+0

'login_user(u)'是否傳遞'實際的用戶對象',因爲'u'是實際的用戶對象。 – Tommy 2014-10-09 14:31:57