2014-10-08 77 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