Модель, здесь я использую user_loader
, который является ответом при входе пользователя в систему, поскольку он загружает правильный объект пользователя, который входит в систему:
@login_manager.user_loader
def load_user(user_id):
cUser = auth.current_user['localId']
cUserDB = db.child("Users").order_by_key().equal_to(cUser).limit_to_first(1).get()
return User(username = cUserDB.val().get("username"),
email = cUserDB.val().get("email"),
role = cUserDB.val().get("role"),
userId = cUserDB.val().get("userId"),
profile_image = cUserDB.val().get("profile_image"))
class User(UserMixin):
def __init__(self, username, email, role, userId, profile_image):
self.__username = username
self.__email = email
self.__role = role
self.__userId = userId
self.__profile_image = profile_image
def is_active(self):
return True
def is_authenticated(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return str(self.__userId)
def get_username(self):
return self.__username
def set_username(self, username):
self.__username = username
def get_email(self):
return self.__email
def set_email(self, email):
self.__email = email
def get_role(self):
return self.__role
def set_role(self, role):
self.__role = role
# def get_userId(self):
# return self.__userId
def set_userId(self, userId):
self.__userId = userId
def get_profile_image(self):
return str(self.__profile_image)
def set_profile_image(self, profile_image):
self.__profile_image = profile_image
def __repr__(self):
return f"User('{self.__userId}','{self.__username}', '{self.__email}','{self.__role}', '{self.__profile_image}'')"
Маршруты, при маршруте входа в систему он обычно загружает правильного пользователя, который при входе в систему и когда я печатаю current_user
, он выдает правильный, также в сеансе показывает user_id
:
@app.route('/', methods=['GET', 'POST'])
@app.route('/login', methods=['GET', 'POST'])
def login():
message = ""
# global uid
if current_user.is_authenticated:
return redirect(url_for('home'))
if request.method == "POST":
email = request.form["LogInFormEmail"]
password = request.form["LogInFormPassword"]
loginUser = auth.sign_in_with_email_and_password(email, password)
uid = loginUser['localId']
uEmailToken = loginUser['email']
getCurrentDB = db.child("Users").order_by_key().equal_to(uid).limit_to_first(1).get()
if getCurrentDB != None:
for gc in getCurrentDB.each():
user = User(username = gc.val().get('username'),
email = gc.val().get('email'),
role = gc.val().get('role'),
userId = gc.val().get('userId'),
profile_image = gc.val().get('profile_image'))
login_user(user)
print(current_user)
print("-------------login")
print(session)
next_page = request.args.get('next')
return redirect(next_page) if next_page else redirect(url_for('home'))
else:
message = "No User found!"
return redirect(url_for('login'))
else:
message = "Incorrect Password!"
return render_template('loginPage.html')
Когда я печатаю сеанс, он имеет текущий user_id
, но это не так отобразить current_user
, я хотел бы использовать current_user
на любом маршруте. Любое предложение?
@app.route('/homePage', methods = ['GET', 'POST'])
@login_required
def home():
print(current_user)
print("homepage ----------------")
print(session)
return render_template('homePage.html')