Tài liệu dành cho Flask-login nói về việc xử lý URL "tiếp theo". Ý tưởng này có vẻ là:Làm cách nào để chuyển qua URL "tiếp theo" với Flask và Flask-login?
- tài đi vào
/some-secret-URL
- người dùng được chuyển hướng đến một trang đăng nhập (ví dụ
/login
) - Sau khi đăng nhập thành công, người dùng sẽ được chuyển hướng trở lại
/some-secret-URL
Ví dụ nửa đầy đủ chỉ sử dụng thông tin đăng nhập Flask mà tôi đã tìm thấy là https://gist.github.com/bkdinoop/6698956. Nó rất hữu ích, nhưng vì nó không bao gồm các tệp mẫu HTML, tôi thấy nếu tôi có thể tạo lại chúng như là một bài tập tự rèn luyện.
Dưới đây là một phiên bản đơn giản của phần /secret
và /login
:
@app.route("/secret")
@fresh_login_required
def secret():
return render_template("secret.html")
@app.route("/login", methods=["GET", "POST"])
def login():
<...login-checking code omitted...>
if user_is_logged_in:
flash("Logged in!")
return redirect(request.args.get("next") or url_for("index"))
else:
flash("Sorry, but you could not log in.")
return render_template("login.html")
Và đây là login.html
:
<form name="loginform" action="{{ url_for('login') }}" method="POST">
Username: <input type="text" name="username" size="30" /><br />
Password: <input type="password" name="password" size="30" /><br />
<input type="submit" value="Login" /><br />
Bây giờ, khi người dùng truy cập /some-secret-URL
, ông được chuyển hướng đến /login?next=%2Fsecret
. Cho đến nay, rất tốt - tham số "tiếp theo" nằm trong chuỗi truy vấn.
Tuy nhiên, khi người dùng gửi biểu mẫu đăng nhập, anh ta được chuyển hướng trở lại trang chỉ mục, chứ không phải quay lại URL /secret
.
Tôi đoán lý do là vì thông số "tiếp theo" có sẵn trên URL đến, không được tích hợp vào biểu mẫu đăng nhập và do đó không được chuyển thành biến khi biểu mẫu được xử lý. ? đúng cách để giải quyết việc này
Một giải pháp dường như làm việc - thay đổi thẻ <form>
từ
<form name="loginform" action="{{ url_for('login') }}" method="POST">
tới:
<form name="loginform" method="POST">
Với thuộc tính "action" bị loại bỏ, trình duyệt (ít nhất Firefox 45 trên Windows) tự động sử dụng URL hiện tại, khiến nó kế thừa chuỗi truy vấn ?next=%2Fsecret
, thành công gửi nó tới trình xử lý biểu mẫu.
Nhưng bỏ qua thuộc tính biểu mẫu "hành động" và để trình duyệt điền vào đúng giải pháp? Nó có hoạt động trên tất cả các trình duyệt và nền tảng không?
Hoặc Flask hoặc Flask-login có ý định xử lý theo cách khác không?
đầu ra trong nguồn của html khi bạn đặt 'action =" {{url_for ('login')}} "' là gì? –
http://flask.pocoo.org/snippets/63/ – davidism
@K DawG, nó là '