Когда я пытаюсь напечатать localID вошедшего в систему пользователя, это не работает - PullRequest
0 голосов
/ 10 января 2020

Я наконец-то узнал, как получить доступ к экземпляру localId из моего класса firebase, но теперь, когда пользователь вошел в систему, и я пытаюсь напечатать localId, объекты возвращаются как none. Когда я пытаюсь напечатать его в классе firebase, он возвращает значение, но вне класса это не работает. Вот мой класс Firebase.

class MyFireBase():

    def __init__(self):
        # initialize localId to None, just to be sure it always exists
        self.localId = None


    def sign_up(self, email, password):

            app = App.get_running_app()
            email = email.replace("\n","")
            password = password.replace("\n","")

            # Send email and password to Firebase
            # Firebase will return localId, authToken (idToken), refreshToken
            signup_url = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser?key=" + self.wak
            signup_payload = {"email": email, "password": password, "returnSecureToken": True}
            sign_up_request = requests.post(signup_url, data=signup_payload)
            sign_up_data = json.loads(sign_up_request.content.decode())
            print(sign_up_request.ok)
            print(sign_up_request.content.decode())


            if sign_up_request.ok == True:
                print(sign_up_data)
                refresh_token = sign_up_data['refreshToken']

                self.localId = sign_up_data['localId']
                idToken = sign_up_data['idToken']

                # Save refreshToken to a file
                with open(app.refresh_token_file, "w") as f:
                    f.write(refresh_token)


                app.local_id = self.localId
                app.id_token = idToken




                my_data =  '{"avatar": "profilepic.png", "jobs_done": "", "jobs_posted": ""}'
                post_request = requests.patch("https://moonlighting-bb8ab.firebaseio.com/users/" + self.localId + ".json?auth=" + idToken, data=my_data)
                print(post_request.ok)
                print(post_request.content.decode())

                app.root.current = "create"



            elif sign_up_request.ok == False:

                error_data = json.loads(sign_up_request.content.decode())
                error_message = error_data["error"]['message']
                app.root.ids.signup.ids.signup_message.text = error_message.replace("_", " ")

    def send_user_details(self):
        app = App.get_running_app()
        my_data ={"first name": app.root.ids.create.ids.first_name.text, "last name": app.root.ids.create.ids.last_name.text,
                   "phone number": app.root.ids.create.ids.phone_number.text, "job1": app.root.ids.create.ids.job1.text, "job2": app.root.ids.create.ids.job2.text,
                   "job3": app.root.ids.create.ids.job3.text, "date of birth": app.root.ids.create.ids.date_of_birth.text, "state": app.root.ids.create.ids.state1.text}

        user_details = requests.patch("https://moonlighting-bb8ab.firebaseio.com/users/" + app.local_id + ".json?auth=" + app.id_token,  json.dumps(my_data))
        print(user_details.ok)
        print(user_details.content.decode())

        app.root.current = "main"




    def sign_in_existing_user(self, email, password):
        signin_url = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=" + self.wak
        signin_payload = {"email": email, "password": password, "returnSecureToken": True}
        signin_request = requests.post(signin_url, data=signin_payload)
        sign_up_data = json.loads(signin_request.content.decode())
        app = App.get_running_app()
        print(signin_request.ok)
        print(signin_request.content.decode())

        if signin_request.ok == True:
            refresh_token = sign_up_data['refreshToken']

            self.localId = sign_up_data['localId']
            idToken = sign_up_data['idToken']
            # Save refreshToken to a file
            with open(app.refresh_token_file, "w") as f:
                f.write(refresh_token)

            # Save localId to a variable in main app class
            # Save idToken to a variable in main app class
            app.local_id = self.localId
            app.id_token = idToken
            # Create new key in database from localId
            # Get friend ID
            # Get request on firebase to get the next friend id
            # --- User exists so i dont need to get a friend id
            # self.friend_get_req = UrlRequest("https://friendly-fitness.firebaseio.com/next_friend_id.json?auth=" + idToken, on_success=self.on_friend_get_req_ok)
            # app.change_screen("home_screen")

            app.root.current = "main"


        elif signin_request.ok == False:
            error_data = json.loads(signin_request.content.decode())
            error_message = error_data["error"]['message']
            app.root.ids.login.ids.login_message.text = error_message.replace("_", " ")

Вот класс, в котором я пытаюсь его напечатать из

class ProfileWindow(Screen):

def on_enter(self, *args):
        print(MyFireBase().localId)

Любая предоставленная помощь будет принята

Вот код для ProfileWindow


class ProfileWindow(Screen):

    def __int__(self, thefirebase, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.thefirebase = thefirebase


    def on_enter(self, *args):
        print(self.thefirebase.localId)

Я переименовал его в thefirebase, потому что у меня есть модуль, который я тоже использую под названием firebase.

1 Ответ

0 голосов
/ 10 января 2020

Вы устанавливаете переменную localId в экземпляре MyFireBase при вызове метода sign_up(). Это означает, что если вы хотите получить localId, вам нужно будет использовать тот же самый экземпляр MyFireBase. Создание нового MyFireBase экземпляра внутри on_enter просто вернет вам начальное значение localId - None - потому что sign_up() не был вызван в этом экземпляре.

You ' Вам потребуется реструктурировать ваш код так, чтобы при создании ProfileWindow вы передавали ему инициализированный экземпляр MyFireBase.

Например:

class ProfileWindow(Screen):

    def __init__(self, firebase, **kwargs):
        super().__init__(**kwargs)

        self.firebase = firebase  # Store the initialised MyFireBase instance

    def on_enter(self, *args):
        print(self.firebase.localId)  # Use the initialised instance

И затем передавали MyFireBase экземпляр ProfileWindow при его создании.

firebase = MyFireBase()
firebase.sign_up(...)

...

window = ProfileWindow(firebase)  # Pass the initialised MyFireBase instance
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...