Python 页面更改时,Flask登录会话不会持久化
我在python中使用flask登录、flask和socketio。当我登录用户时,可以在login_data()函数中看到,会话变量通过flask login正确设置。但是,当路由更改时,所有会话变量都将丢失,这将导致flask登录不允许用户访问/overview页面。我已经尝试了很长时间,也无法思考会话变量丢失的原因,我已经在chrome、firefox和internet explorer中尝试过了,所有的结果都是一样的 p、 我知道我不是在对密码进行哈希运算,我会在这之后着手处理 main.py:Python 页面更改时,Flask登录会话不会持久化,python,session,flask,flask-login,flask-socketio,Python,Session,Flask,Flask Login,Flask Socketio,我在python中使用flask登录、flask和socketio。当我登录用户时,可以在login_data()函数中看到,会话变量通过flask login正确设置。但是,当路由更改时,所有会话变量都将丢失,这将导致flask登录不允许用户访问/overview页面。我已经尝试了很长时间,也无法思考会话变量丢失的原因,我已经在chrome、firefox和internet explorer中尝试过了,所有的结果都是一样的 p、 我知道我不是在对密码进行哈希运算,我会在这之后着手处理 main
#Store
from flask import *
import nltk
import functools
import re
from users import User
#from flask_socketio import SocketIO,send,emit,disconnect
from flask_socketio import *
from flask_login import LoginManager,login_user,current_user,login_required
import flask_login
from pymongo import MongoClient
client = MongoClient()
db = client.database
app = Flask(__name__)
app.secret_key= 'lemon'
socketio = SocketIO(app)
login_manager = LoginManager()
login_manager.init_app(app)
@login_manager.user_loader
def load_user(email):
print('email given: '+email)
cursor = db.users.find_one({"user.email":str(email)})
if not cursor:
return None
return User(email)
@app.route('/')
def home():
print('overview session')
for i in session:
print(session[i])
return render_template('index.html')
@app.route('/login')
def login():
return render_template('login.html')
@app.route('/overview')
@login_required
def overview():
return render_template('overview.html')
@socketio.on('login_data')
def login_data(email,password):
cursor = db.users.find_one({"user.email":str(email),"user.password":str(password)})
if cursor:
user = User(cursor['user']['email'])
print(user.get_id())
login_user(user,remember=True)
print('sessions')
for i in session:
print(session[i])
emit('auth',[True,current_user.email])
else:
emit('auth',False)
if __name__ == '__main__':
socketio.run(app,host='0.0.0.0',debug=True)
用户类别:
#Users.py
from pymongo import MongoClient
class User(object):
def __init__(self,email):
self.email = email
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return unicode(self.email)
我自己也找到了答案。由于某些未知原因,您无法在flask socketio事件处理程序中使用flask login的login_user函数,必须通过正常的post请求来完成
希望这对某人有所帮助。是的,这是正确的。Flask Login的Login_user函数修改用户会话,Flask SocketIO在更改用户会话方面施加了某些限制。看见