electron升级到20版本后,禁用第三方cookie、跨域问题解决方法
最近公司的electron项目从13升级到最新的20版本,导致qq登录失效问题,特此记录
1. qq扫码登录失效
升级后之前的老版本可以扫码登录,但是新版本扫码登录后,页面直接刷新,没有登录成功。经过查看网络请求排查得出是由于新版本Cookie的SameSite限制导致,qq的第三方登录的某些接口在response里设置了cookie属性,却没有加上SameSite=None; Secure
,直接导致qq第三方登录最后的登录验证接口读不到的response里设置的cookie属性,导致登录失效。
解决办法:
通过electron的webRequest对象在请求返回阶段加上SameSite=None; Secure
,代码如下
const { app, session } = require('electron')
app.whenRady().then(() => {
session.defaultSession.webRequest.onHeadersReceived(
{ urls: ['*://*.qq.com/*'] },
(details, callback) => {
if (
details.responseHeaders &&
details.responseHeaders['Set-Cookie'] &&
details.responseHeaders['Set-Cookie'].length &&
!details.responseHeaders['Set-Cookie'][0].includes('SameSite=none')
) {
for (var i = 0;i< details.responseHeaders['Set-Cookie'].length; i++) {
details.responseHeaders['Set-Cookie'][i] += '; SameSite=None; Secure';
}
}
callback({ cancel: false, responseHeaders: details.responseHeaders });
},
);
})
2. qq一键登录跨域问题
升级后本机登录qq的pc客户端, 使用一键登录也失效了,经过查看控制台报错得出,是跨域安全问题导致。qq的本地一键登录,会通过内网网络请求访问本机的qq pc端,从而实现一键登录,但是升级到20版本后,这个内网网络请求被限制了。
解决办法:
加一行代码,禁用chromium的BlockInsecurePrivateNetworkRequests
特性
// 解决qq一键登录跨域问题
app.commandLine.appendSwitch('disable-features','BlockInsecurePrivateNetworkRequests')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗