Reputation: 1
I have been trying to build a real-time app, but unfortunately, I am not able to work around session management in SocketIO. I will not be pasting my original code; instead, I wrote the code below to help illustrate my issue in fewer lines.
I can set a session key in the /login route and fetch it in the /test route. However, inside SocketIO events, there are no session keys/values. In short, SocketIO seems to be managing its own session keys, but I need both Flask routes and SocketIO to share the same session.
Here is my code:
from flask import Flask, session, request
from flask_session import Session
from flask_socketio import SocketIO
from flask_cors import CORS
app = Flask(__name__)
app.secret_key = "enufwbqbiuwefbwebfuwergbfyewrgbuyrbbwueuwen"
app.config['SESSION_TYPE'] = 'filesystem'
Session(app)
socketio = SocketIO(app, manage_session=False, cors_allowed_origins='*')
cors = CORS(app, resources={r"/socket.io/*": {"origins": "http://localhost:5000"}})
@app.route('/login')
def login():
session['username'] = "Hello world"
return 'Logged in successfully'
@app.route('/test')
def test():
if session.get('username'):
return session.get('username')
return 'Username key not set'
@socketio.on('connect')
def handle_connect():
if session.get('username'):
print(session['username'])
else:
print('Username key not set')
@socketio.on('test_socket')
def test_socket():
if session.get('username'):
print(session['username'])
else:
print("User not logged in")
if __name__ == '__main__':
socketio.run(app, debug=True)
My client side code
const socket = io('http://localhost:5000',
{
withCredentials: true
});
socket.emit('test_socket');
I am on windows machine, so i am not sure if that might be the issue.
Upvotes: 0
Views: 64