Python Flask:如何使用FetchAPI登录/注销?

Python Flask:如何使用FetchAPI登录/注销?,python,flask,fetch-api,flask-login,Python,Flask,Fetch Api,Flask Login,我有以下登录/注销和检查日志状态的路径: from flask_login import current_user, login_user, logout_user @app.route('/check_login_status') def check_login_status(): return str(current_user.is_authenticated) @app.route('/log_in') def log_in(): user = User.que

我有以下登录/注销和检查日志状态的路径:

from flask_login import current_user, login_user, logout_user

@app.route('/check_login_status')
def check_login_status():
    return str(current_user.is_authenticated)
    
@app.route('/log_in')
def log_in():
    user = User.query.first()
    login_user(user)
    return 'OK'
    
@app.route('/log_out')
def log_out():
    logout_user()
    return 'OK'
如果我在浏览器中手动输入这些路由,则一切正常-用户登录/注销,并返回正确的布尔值

但是,我需要在前端使用
fetch
API访问这些路由,如下所示:

function login() {
    fetch('http://127.0.0.1:5000/log_in')
}
            
function logout() {
    fetch('http://127.0.0.1:5000/log_in')
}
但是在前端调用这些函数(例如单击按钮)不会影响登录状态:
check\u login\u status
route的响应将保持不变


为什么会这样?我可以解决这个问题吗?

首先在您的登录路径中

@app.route('/log_in')
def log_in():
user = User.query.first() // this is wrong .. you always login 
                          //with the first user in your database table 
login_user(user)
return 'OK'
。。。。。 因此,首先需要指定要发布此路由的方法

@app.route('/log_in' , methods=['POST'])
您将在请求正文中接收用户凭据,例如电子邮件和密码

user_data= request.get_json()
然后通过电子邮件查询

user = User.query.filter_by(email=user_dat['email']).first()
然后,您需要对请求中的密码进行散列,并将其与保存在数据库中的用户的散列密码进行比较。。如果它们相同 然后将其传递给您的登录用户函数 登录用户(用户)

///java脚本 根据要求,你需要这样做

function login() {
fetch('http://127.0.0.1:5000/log_in',{
method: "POST",
headers: {
  "Content-Type": "application/json",
},
body: JSON.stringify({email:'email@email.com',password:'password'}),}).then((res) => {
  return res.json();
}).catch((err) => {
  return err;
});

}

您可以在该链接中阅读fetch API
https://developers.google.com/web/updates/2015/03/introduction-to-fetch