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