Flask 登录:即使登录用户后,current_user 也无法工作

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

我正在烧瓶中创建一个聊天应用程序并做出反应。在反应中,我调用登录请求,并在成功返回后显示聊天页面,该页面询问用户当前加入的当前用户房间。但在 Flask 中,我收到此错误。

192.168.100.9 - - [25/Dec/2023 17:01:55] "POST /get_rooms HTTP/1.1" 500 -
Traceback (most recent call last):
  File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 1478, in __call__
    return self.wsgi_app(environ, start_response)
  File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask_socketio\__init__.py", line 43, in __call__
    return super(_SocketIOMiddleware, self).__call__(environ,
  File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\engineio\middleware.py", line 74, in __call__
    return self.wsgi_app(environ, start_response)
  File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 1458, in wsgi_app
    response = self.handle_exception(e)
  File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask_cors\extension.py", line 176, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 1455, in wsgi_app
    response = self.full_dispatch_request()
  File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 869, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask_cors\extension.py", line 176, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 867, in full_dispatch_request
    rv = self.dispatch_request()
  File "D:\PythonSTUFF\Python-flask-chat-app\venv\lib\site-packages\flask\app.py", line 852, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "D:\PythonSTUFF\Python-flask-chat-app\routes.py", line 196, in get_rooms
    rooms = User.query.filter_by(username=current_user.username).first().rooms

AttributeError: 'AnonymousUserMixin' object has no attribute 'username'

在登录函数中,我使用flask_login.login_user()来登录用户。

@main.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    
    if request.method == 'POST':
        username = request.get_json()['username']
        password = request.get_json()['password']
        
        user = User.query.filter_by(username=username).first()
        if user is not None and user.verify_password(password):
                login_user(user)
                return jsonify({"status": "success"}), 200
        else:
            error = "Incorrect username or password"
    else:
        error = "Incorrect username or password"
            
    return jsonify({"status": "error", "message": error}), 500

成功返回后,调用获取房间的请求,但出现错误。

@login_required
@main.route('/get_rooms', methods=['GET', 'POST'])
def get_rooms():
    rooms = User.query.filter_by(username=current_user.username).first().rooms
    rooms_data = []
    for room in rooms:
        rooms_data.append({'room_code': room.room_code, 'room_name': room.room_name, 'last_message': room.last_message, 'last_message_user': room.last_messsage_user, 'admin': room.admin})
    return jsonify({"status": "success", "rooms": rooms_data}), 200

这应该返回当前用户的房间。

reactjs flask fetch-api flask-login
1个回答
0
投票

不完全了解错误,但是,您是否确切知道错误发生在哪里、在哪一行。测试 get_json() 方法返回您想要的正确数据的一件事。因为错误“AttributeError: 'AnonymousUserMixin' object has no attribute 'username'”表明没有名为 'username' 的属性,可能在该 json 中找不到 'username' 键。检查一下。我认为的一件事是,请求中的数据未正确发送,或者无法从请求中提取数据。按照文档了解获取json数据的函数或者再次检查你的请求,可能是请求方法导致了错误。

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