[英]Python Flask Login Current_User Not Always Available
关于以下任何想法?
这是我的用户 Class:
class UserType(db.Document):
firstName = db.StringField()
lastName = db.StringField()
email = db.StringField()
passwordHash = db.StringField()
created = db.DateTimeField()
lastEdit = db.DateTimeField()
lastSignIn = db.DateTimeField()
hostOrTest = db.StringField()
def to_json(self):
return jsonify({
'_id': str(self.pk),
'First Name': self.firstName,
'Last Name': self.lastName,
'Email': self.email,
'Creation Date': self.created,
'Edit Date': self.lastEdit,
'Last Sign In': self.lastSignIn,
'hostOrTest': self.hostOrTest
})
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return str(self.pk)
@property
def host(self):
if self.hostOrTest == "host":
return True
else:
return False
@property
def test(self):
if self.hostOrTest == 'test':
return True
else:
return False
这是我的登录端点:
@app.route("/api/Login", methods=["POST"])
def login():
request_data = request.get_json()
email = request_data["email"]
if 'passwordHash' in request_data:
passwordHash = request_data["passwordHash"]
else:
passwordHash = request_data["email"]
userObj = UserType.objects(email=email, passwordHash=passwordHash).first()
if userObj:
login_user(userObj, remember=True, fresh=False)
userObj.update(lastSignIn=datetime.datetime.now())
return(jsonify('success'), 200)
else:
return(jsonify("Username or password error"), 401)
这一切都按预期工作,当我询问服务器以查看用户是否使用端点登录时:
@app.route("/api/isUserLoggedIn", methods=["GET"])
def apiIsUserLoggedIn():
if current_user.is_authenticated:
print(f"User ID is {current_user.get_id()}")
return('True')
elif not current_user.is_authenticated:
return('False')
它按预期工作并打印到控制台是用户 ID。
但是,当我运行这个 function 时:
@app.route('/socketIO/API/createRoom', methods=["POST"])
@socketio.event
#@login_required
def createRoom():
quizId = ''.join(random.choice(string.ascii_lowercase)
for i in range(6))
questions = []
timeLimit = 5
quizStarted = 'False'
print(f"User ID is {current_user.get_id()}")
activeRooms = ActiveRooms(
roomId=quizId,
connectedUserId=[current_user.get_id()],
allConnectedUsers=[current_user.get_id()],
dateTime=datetime.datetime.now(),
questions=questions,
timeLimit=timeLimit,
quizStarted=quizStarted,
currentQuestion="null"
)
activeRooms.save()
print(f'room created with quiz ID: {quizId}')
# CHANGEBACK emit(f'ID {quizId}')
return(f'ID {quizId}')
这些也是同一个文件的一部分,在 createRoom function 中,我每次都得到 User ID is None 打印,即使在我的 IsUserLoggedIn function 中它工作正常。
有任何想法吗?
PS 这是我在 StackOverflow 上的第一篇文章,所以我希望我没有搞砸任何事情::)
谢谢!
您正在使用self.pk
,但我在任何地方都没有看到这个定义。 这应该得到主键吗? 因为那时您可能想为属性设置primary_key=True
(例如email = db.StringField(primary_key=True)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.