1
플라스크 로그인, 플라스크 및 소켓 오니를 파이썬으로 사용하고 있습니다. login_data() 함수에서 볼 수있는 것처럼 사용자에게 로그인하면 세션 변수가 flask-login에 의해 올바르게 설정됩니다. 그러나 경로가 변경되면 모든 세션 변수가 손실되어 플라스크 로그인으로 인해 사용자가/overview 페이지에 액세스 할 수 없게됩니다. 나는 길고 열심히 노력했고 세션 변수가 손실 된 이유를 생각할 수 없다. 크롬, 파이어 폭스, 인터넷 익스플로러에서 같은 결과를 얻으려고 시도했다.플라스크 로그인 세션이 페이지가 변경 될 때 지속되지 않음
p.s - 암호를 해싱하지 않는다는 것을 알고 있습니다.
main.py :
#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-Login의 login_user 함수는 사용자 세션을 수정하며 사용자 세션을 변경하는 것과 관련하여 Flask-SocketIO에 의해 부과 된 특정 제한 사항이 있습니다. https://flask-socketio.readthedocs.io/en/latest/#access-to-flask-s-context-globals를 참조하십시오. – Miguel