无法在MethodView中使用flask_login访问当前用户ID

问题描述 投票:0回答:1

我在基于类的视图中访问POST请求中的用户ID时遇到问题。在GET方法中,我可以轻松获取数据。我猜问题是因为我的POST方法没有用@login_required装饰,但是由于收到错误,我无法装饰POST,访问登录的用户ID的解决方法是什么?

Authenticate.py

class Authenticate(MethodView):

  def post(self):
    ...some code
    login_user(user, remember=True)
    g.user = current_user.id

在这个课程中,我想访问用户ID

class User(MethodView):

  def post(view):
    # not working
    print(current_user.id)
    print(g.user) 
flask flask-login
1个回答
0
投票

使用Flask-Login时,您应该具有user_loader回调函数

from flask_login import LoginManager

app = Flask(__name__)
login_manager = LoginManager(app)

@app.login_manager.user_loader
def load_user(_id):
    user = users[_id]
    return user

这假设您的loginauthenticate端点将用户保存在login_user之前的某个位置。为简单起见,以上代码片段将其存储在python字典中,其中key是您唯一的user_id,而值是您的用户信息。

现在调用任何端点时,将调用此user_loader回调函数,并使用返回的用户(return user)填充current_user对象

对于您的代码,它可能会那样工作

  def post(self):
    ...some code
    ## New code ##
    save_user(user._id, user)
    login_user(user, remember=True)
    return {"state":"authenticated"}, 200

当然save_user()应该将用户保存在user_loader回调可访问的位置

© www.soinside.com 2019 - 2024. All rights reserved.