Okay so I get this error saying:ValueError: The default Firebase app already exists. This means you called initialize_app() more than once without providing an app name as the second argument. In most cases you only need to call initialize_app() once. But if you do want to initialize multiple apps, pass a second argument to initialize_app() to give each app a unique name.
I understand this says that the firebase app is being initialized more that once but I dont understand where exactly I'm doing it.
Ok so here are my modules of code in python:homeScreen.Py:
import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import *from PyQt5.QtWidgets import QWidgetfrom PyQt5.QtGui import *import firebase_adminfrom firebase_admin import credentials, firestorefrom cryptography.fernet import Fernetclass HomeScreen(QWidget): def __init__(self, name, username): super().__init__() self.cred = credentials.Certificate("mykey.json") firebase_admin.initialize_app(self.cred) self.db = firestore.client() self.name = name self.username = username self.initUI() self.cipher = Fernet('mykey') def initUI(self): self.setWindowTitle('Home') self.setGeometry(100, 100, 700, 500) greeting_message = "Hello " + self.name +". Good username: " + self.username self.info = QLabel(greeting_message, self) self.info.setGeometry(20, 20, 400, 50) self.font = QFont() self.font.setPointSize(20) self.info.setFont(self.font)
And here is my base.py:
import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import *from PyQt5.QtWidgets import QWidgetfrom login import *from signup import *class Options(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('h') self.setGeometry(100, 100, 700, 500) self.login_b = QPushButton('Login', self) self.login_b.setGeometry(250, 150, 100, 50) self.login_b.clicked.connect(self.login) self.signup_b = QPushButton('Sign Up', self) self.signup_b.setGeometry(250, 210, 100, 50) self.signup_b.clicked.connect(self.signup) layout = QVBoxLayout() self.setLayout(layout) def login(self): self.login_window = Login() self.login_window.show() self.close() def signup(self): self.signup_window = SignUp() self.signup_window.show() self.close()if __name__ == '__main__': app = QApplication(sys.argv) window = Options() window.show() sys.exit(app.exec_())
And at last here is my sign up.py
import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import *from PyQt5.QtWidgets import QWidgetfrom PyQt5.QtGui import *import firebase_adminfrom firebase_admin import credentials, firestorefrom cryptography.fernet import Fernetimport base64from homeScreen import *class SignUp(QWidget): def __init__(self): super().__init__() self.initUI() self.cipher = Fernet('mykey') self.cred = credentials.Certificate("mypath.json") firebase_admin.initialize_app(self.cred) self.db = firestore.client() def initUI(self): self.setWindowTitle('Sign Up') self.setGeometry(100, 100, 700, 500) self.info = QLabel('Sign Up', self) self.info.setGeometry(360, 100, 200, 50) self.font = QFont() self.font.setPointSize(20) self.info.setFont(self.font) self.name_t = QLineEdit(self) self.name_t.setGeometry(300, 150, 200, 30) self.name_t.setPlaceholderText("Full Name") self.username_t = QLineEdit(self) self.username_t.setGeometry(300, 200, 200, 30) self.username_t.setPlaceholderText("Username") self.password_t = QLineEdit(self) self.password_t.setEchoMode(QLineEdit.Password) self.password_t.setGeometry(300, 240, 200, 30) self.password_t.setPlaceholderText("Password") self.submit_b = QPushButton('Submit', self) self.submit_b.setGeometry(300, 280, 200, 50) self.submit_b.clicked.connect(self.submit_info) layout = QVBoxLayout() self.setLayout(layout) def submit_info(self): password_bytes = self.password_t.text().encode() encrypted_password = base64.b64encode(self.cipher.encrypt(password_bytes)).decode() self.db.collection('users').add({'name': self.name_t.text(), 'username': self.username_t.text(), 'password': encrypted_password}) self.login_window = HomeScreen(self.name_t.text(), self.username_t.text()) self.login_window.show() self.close()
Please comment for any further clarification