Skip to content

electron自动登录问题

2025.01.17

问题描述

在一个 electron 应用的登录页中实现一个自动登录的功能,通过 localStroge 来将是否自动登录这个变量值缓存起来。

这里有一个项目背景是,由于一些用户使用的内网,无法访问外网,因此在 electron 的主进程逻辑中,只要不是开发环境,都会加载本地打包结果 dist/index.html。如果用户能够访问外网,那么在执行登录逻辑的时候,会携带登录信息跳转到web中。

根据这个背景能够得知,electron 应用的登录页和内置 web 的登录页是不同的,当我们修改了登录页的内容并部署内置 web 的时候,是不会影响到 elelctron 应用的登录页的,只有重新打包 electron 应用才可以。

出现的问题是,首次启动 electron 应用,在登录页中勾选自动登录并登录进入主页,退出登录,首先这个时候其实已经发生异常了,但是我没注意到,异常就是登录页并没有勾选自动登录,这个时候我第二次勾选自动登录并登录进入主页。第二次退出登录,这个时候就看起来一切正常,此时我取消勾选自动登录并第三次登录以及退出登录,并退出 electron 应用。在重新启动 electron 应用时,程序执行了自动登录的逻辑。

问题流程复现:

image-20250503145720187

为什么会重新执行自动登录的逻辑?明明已经取消勾选了自动登录,却仍旧是走了自动登录的逻辑。

问题的原因就在于首次启动 electron 应用的登录页是 dist/index.html,而后续(上图第4、6步)进入主页以及返回的登录页,都是内置 web 页面,我们首次登录时,自动登录是被缓存到 dist/index.html 中的,这就导致我们第一次返回登录页(即 web 登录页)时,会看到自动登录并没有被勾选上,因为此时 web 登录页没有缓存自动登录。而后续的操作让我们误以为自动登录已经从缓存中移除,但实际上移除的是 web 登录页的缓存,而不是 dist/index.html 的缓存。

解决过程与方案

  • 在不了解背景的情况下,最开始开发自动登录的时候其实也有发现,明明已经部署内置 web 了,但 electron 应用的登录页却没有变,需要重新打包安装才可以。在后续了解到背景之后,意识到登录页时存在两套逻辑的,也明白了触发自动登录的问题所在。

  • 在清楚问题根源所在后,解决就简单了,只需要在主页退出登录时,重新加载 dist/index.html 即可,并且退出登录时,为了避免重新执行自动登录逻辑,需要携带参数来控制。加载文件并携带参数的 api 详见:wind.loadFile API