1
私はフラスコログイン、フラスコ、およびソケットをPythonで使用しています。 login_data()関数で見られるようにユーザーにログインすると、セッション変数はフラスコログインによって正しく設定されます。しかし、ルートが変更されると、セッション変数のすべてが失われ、フラスコのログインによってユーザーは/ 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