如何在后台运行的ElectronJs应用程序中实现Firebase Google Auth?

uemypmqf  于 11个月前  发布在  Electron
关注(0)|答案(2)|浏览(133)

我正在构建一个在后台运行的ElectronJs应用程序(在托盘中)。我想使用Firebase Auth在应用程序中添加Sign in with Google功能。我尝试搜索,但没有看到任何文档。我面临的几个问题:

  • 我可以让它与渲染进程一起工作,但我希望我的主进程保存User对象,因为主进程在后台进行需要Auth令牌的API调用。
  • 我的应用程序在托盘中的后台运行,所以它在任何时候都没有打开的活动窗口。

有没有一种方法可以在主进程中实现身份验证代码,然后使用IPC使用渲染器打开登录窗口?

5t7ly7z5

5t7ly7z51#

以下是对我有效的解决方案
1.将用户重定向到浏览器登录页面。登录完成后,触发一个打开应用程序的深层链接。深层链接应包含idToken其他参数。
1.从url中解析token并使用firebase auth的signinwithcredentials API。这将获取credentials对象并执行登录。

pdkcd3nj

pdkcd3nj2#

希望这对你有帮助

主进程(main.js)

const { app, BrowserWindow, ipcMain } = require('electron');
const firebase = require('firebase/app');
require('firebase/auth');

// Initialize Firebase
firebase.initializeApp({
    // Your Firebase config
});

let authWindow;

ipcMain.on('login', (event, arg) => {
    authWindow = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: false // It's important for security reasons
        }
    });

    // Navigate to Firebase auth URL
    authWindow.loadURL('https://your-auth-url');

    // Handle the response from Firebase
    authWindow.webContents.on('did-navigate', (event, url) => {
        // Check if the URL is the redirect URL
        // Extract the auth token and close the window
    });

    authWindow.on('closed', () => {
        authWindow = null;
    });
});

ipcMain.on('request-user-data', (event) => {
    // Send back user data if authenticated
    const user = firebase.auth().currentUser;
    event.reply('user-data-response', user);
});

字符串

渲染器进程(renderer.js)

const { ipcRenderer } = require('electron');

// Request login
ipcRenderer.send('login');

// Listen for user data
ipcRenderer.on('user-data-response', (event, user) => {
    if (user) {
        // User is logged in, handle user data
    }
});

// You can also send a request to get user data
ipcRenderer.send('request-user-data');

相关问题