Flask loginmanager с pyrebase, успешный вход в систему на маршруте входа. Другой маршрут не возвращает ни одного, когда я вызываю current_user, сессия сохранить user_id - PullRequest
0 голосов
/ 06 марта 2020

Модель, здесь я использую 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')
...