You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何signInWithPopup()在pywebview中无法正常工作?

解决pywebview中Firebase谷歌登录弹窗连接失败的问题

问题原因

pywebview的WebView容器与普通浏览器的弹窗机制存在差异,默认会拦截弹窗或限制弹窗与主窗口的同源通信,导致Firebase无法完成弹窗登录的回调流程,从而出现连接失败提示。

解决方案

方案1:切换Firebase登录为重定向模式(推荐)

放弃弹窗登录,改用当前窗口重定向完成登录,从根源避免弹窗拦截问题:

  1. 修改前端登录代码,将signInWithPopup替换为signInWithRedirect:
// 原弹窗登录代码
// signInWithPopup(auth, provider)

// 修改为重定向登录
signInWithRedirect(auth, provider);
  1. 在页面初始化时处理重定向返回的登录结果:
getRedirectResult(auth)
  .then((result) => {
    if (result.user) {
      // 登录成功,处理用户信息
    }
  })
  .catch((error) => {
    // 处理登录错误
  });

方案2:配置pywebview允许弹窗及跨窗口通信

若必须使用弹窗模式,需配置pywebview启用弹窗权限,以CEF引擎为例:
修改Python代码,在create_window中添加webview_options配置:

from tkinter import *
import webview

root = Tk()
win_width = root.winfo_screenwidth()               
win_height = root.winfo_screenheight()
root.geometry("%dx%d" % (win_width, win_height))

webview.create_window(
    title='My Window',
    url='http://localhost:81',
    confirm_close=True,
    webview_options={
        'webview_settings': {
            'allow_popups': True,
            'javascript_open_windows_automatically': True
        }
    }
)
webview.start()
root.destroy()

同时需确保Firebase控制台的授权域名列表中已包含http://localhost:81(浏览器中正常则已配置)。

方案3:自定义登录流程(备选)

通过pywebview的js_api实现Python与前端的通信,将登录状态从前端传递到Python端,或直接在Python端处理OAuth授权逻辑,但此方案复杂度较高,仅作为前两种方案的备选。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:31:47