从 Javascript 到 Flask 的注销请求
Logout request from Javascript to Flask
我正在尝试使用 Flask-Login 从我的 Web 应用程序注销用户。
这是我的 Javascript 函数:
function logout() {
var req = new XMLHttpRequest();
req.open("POST", "http://myaddress/logout", true);
req.withCredentials = true;
req.send();
这是我的 Python 函数:
@app.route('/logout')
@login_required
def logout_function():
logout_user() # Built-in Flask-Login function
return app.send_static_file('login.html')
当我从 Javascript 发送我的请求时,我收到 200,但页面保持不变,因为没有发生重定向。我尝试将 Python 函数的最后一行更改为 return redirect(url_for('login_function'))
,但没有帮助。
会不会是我的 Javascript 功能导致了问题?
您需要使用 JavaScript 重定向到注销页面:
function logout() {
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
window.location.replace("http://myaddress/logout.html");
}
};
req.open("POST", "http://myaddress/logout", true);
req.withCredentials = true;
req.send();
}
您可以硬编码注销-URL,如上所示。在这种情况下,您只需要 return 一个 200 状态码:
return ('', 200)
如果您想 return url,您可以使用 req.responseText
:
访问它
烧瓶:
return (url_for('login_function'), 200)
JavaScript:
if (this.readyState == 4 && this.status == 200) {
window.location.replace(req.responseText);
}
我正在尝试使用 Flask-Login 从我的 Web 应用程序注销用户。
这是我的 Javascript 函数:
function logout() {
var req = new XMLHttpRequest();
req.open("POST", "http://myaddress/logout", true);
req.withCredentials = true;
req.send();
这是我的 Python 函数:
@app.route('/logout')
@login_required
def logout_function():
logout_user() # Built-in Flask-Login function
return app.send_static_file('login.html')
当我从 Javascript 发送我的请求时,我收到 200,但页面保持不变,因为没有发生重定向。我尝试将 Python 函数的最后一行更改为 return redirect(url_for('login_function'))
,但没有帮助。
会不会是我的 Javascript 功能导致了问题?
您需要使用 JavaScript 重定向到注销页面:
function logout() {
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
window.location.replace("http://myaddress/logout.html");
}
};
req.open("POST", "http://myaddress/logout", true);
req.withCredentials = true;
req.send();
}
您可以硬编码注销-URL,如上所示。在这种情况下,您只需要 return 一个 200 状态码:
return ('', 200)
如果您想 return url,您可以使用 req.responseText
:
烧瓶:
return (url_for('login_function'), 200)
JavaScript:
if (this.readyState == 4 && this.status == 200) {
window.location.replace(req.responseText);
}