0

我正在使用烧瓶应用程序作为我的反应前端的后端服务器。在烧瓶应用程序中,我已经设置了 LoginManager(app) 并且@login_manager.user_loader根据烧瓶文档进行了所有设置。通过打印声明,我确保声明current_user.is_authenticated之后是正确的login_user(user, remember=True)

但是,当我current_user.is_authenticated在不同的路线上检查时,这是错误的。我该如何解决这个问题?有关系CORS(app)吗?如果是这样,我如何为 CORS 设置 flask_login ?

#__init__.py
...
app = Flask(__name__)
CORS(app)
login_manager = LoginManager(app)

登录发生如下:

# users.py

@app.route('/auth/login', methods=['GET', 'POST'])
def login():
  username = request.json.get('username')
  password = request.json.get('password')
  userObj = {}

  if verify_password(username, password):
    user =User.query.filter_by(username=username).first()
    login_user(user, remember=True)
    userObj ={"uid":user.id, "username": user.username, "email": user.email}        

  return jsonify({"loggedin":current_user.is_authenticated, "user":userObj})

然后我尝试在发回章节列表之前验证 current_user 是否经过身份验证。

# lists.py
from flask_login import current_user as curUser

@app.route('/get_chaptersList', methods=['GET'])
def chaptersList():
  # Access Checks
  print("curUser:",curUser.get_id(), curUser.is_authenticated)
  if not curUser.is_authenticated:
    return jsonify({ 'list': [], 'restricted':True, 'msg': 'Login required' })

我从上述函数curUser: None False得到的输出,当我在控制台中检查响应时,它总是 { 'list': [], 'restricted':True, 'msg': 'Login required' }

我正在尝试使用烧瓶作为后端来对前端做出反应。为了验证用户身份,我使用了 flask_login。在 package.json 中将 react 的代理值设置为“localhost:5000”的情况下,一切正常。但是为了生产,我避免使用代理并在 fetch 调用中使用整个 url,比如fetch('http://localhost:5000/auth/login', userObj). 当我这样做时,flask 无法记住用户或保持用户登录以进行下一次 api 调用。我试图打印 current_user.is_authenticated 并在下一次 fetch 调用时输出 False。我该如何处理?

4

0 回答 0