Tôi đang sử dụng Flask làm phụ trợ của tôi và jQuery cho một dự án cá nhân mà tôi đang làm việc.Cách chuyển hướng với Flask và jQuery
Để đăng nhập Tôi muốn làm điều này:
$.ajax({
type: "POST",
data: JSON.stringify(body), //username and password
contentType: 'application/json; charset=utf-8',
url: "/login",
success: successFunction,
error: errorFunction,
complete: completeFunction
});
Trong errorFuction tôi sẽ nói cho người dùng biết tên đăng nhập hoặc mật khẩu của họ là không chính xác, vv
Trên backend đường/đăng nhập của tôi trông như thế này
@app.route("/login", methods=['GET', 'POST'])
def login():
if(request.method == "POST"):
#retrieve the username and password sent
data = request.json
if(data is None or not 'username' in data or not 'password' in data):
abort(400)
else:
count = User.query.filter(User.username == data['username']).count()
if(count == 0):
abort(404) #that user doesnt exist
else:
passIsCorrect = User.query.filter(User.username == data['username'],
User.password == data['password']).count()
if(passIsCorrect):
session['user'] = data['username']
return redirect(url_for('index'))
else:
abort(401)
else:
return render_template('login.html')
Tuy nhiên ở phía khách hàng, trình duyệt không chuyển hướng và nếu tôi nhìn vào đối tượng phản hồi trong hàm đầy đủ, tôi sẽ thấy những gì thường được trả về từ '/' route: 200 OK và mẫu index.html.
Câu hỏi của tôi là:
Có cách nào tôi có thể chặn làm cho khách hàng chuyển hướng không?
Tôi giả định vấn đề là vì jquery đang khởi tạo yêu cầu chứ không phải trình duyệt.
Lần đầu tiên tôi giải quyết vấn đề này là tự mình xây dựng phản hồi bằng cách sử dụng make_response
và đặt tiêu đề Vị trí nhưng điều này dẫn đến hành vi tương tự. Giải pháp hiện tại của tôi là để trở về 200 và sau đó là khách hàng không window.location = "/"
, nhưng điều này dường như hacky
Tại sao bạn sử dụng AJAX nếu bạn muốn sao chép hành vi của biểu mẫu thông thường? Ngoài ra, không lưu trữ mật khẩu thô. Băm chúng. – Blender
Bạn có thể muốn xem [Flask-Login] (https://github.com/maxcountryman/flask-login) cho tác vụ này. Nó có lẽ sẽ an toàn hơn hầu hết các hệ thống auth tự xây dựng. –
@Blender Nó sẽ đi qua https cuối cùng – bio595