Flask-loginのドキュメントでは、「次の」URLの処理について説明しています。アイデアがあると思われる:ユーザーがログインページにリダイレクトされ FlaskとFlask-loginで「次の」URLをどのように通すのですか?
/some-secret-URL
に
- ユーザーが行く(例えば
/login
) - は、ログインに成功した後、ユーザーは
/some-secret-URL
私が見つけたFlask-loginを使用している唯一の例は、https://gist.github.com/bkdinoop/6698956です。これは役に立ちますが、HTMLテンプレートファイルが含まれていないため、自己練習として再作成できるかどうかを確認しています。
はここ/secret
と/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")
そして、ここで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 />
、ユーザーの訪問/some-secret-URL
が、彼は/login?next=%2Fsecret
にリダイレクトされますとき。これまでのところ、「次の」パラメータはクエリ文字列内にあります。
ユーザーがログインフォームを送信すると、ユーザーは/secret
URLに戻るのではなく、インデックスページにリダイレクトされます。
私は、着信URLで利用可能だった「次の」パラメータがログインフォームに組み込まれていないため、フォームが処理されるときに変数として渡されないためだと推測しています。これを解決する正しい方法
一つの解決策は、動作しているようです - に
<form name="loginform" action="{{ url_for('login') }}" method="POST">
から<form>
タグを変更します?
<form name="loginform" method="POST">
"action"属性を削除すると、ブラウザ(Windowsでは少なくともFirefox 45)が自動的に現在のURLを使用し、?next=%2Fsecret
というクエリ文字列を継承し、フォーム処理ハンドラに正常に送信されます。
「アクション」フォームの属性を省略し、ブラウザで適切なソリューションに入力させるようにしていますか?それはすべてのブラウザとプラットフォームで機能しますか?
また、FlaskまたはFlask-loginはこれを別の方法で処理する予定ですか?
'action =" {{url_for( 'login')}} ''を実行すると、htmlのソースの出力はどうなりますか? –
http://flask.pocoo.org/snippets/63/ – davidism
@K DawG、それは '