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

如何让密码过期提醒alert弹窗在登录流程中仅触发一次

问题根因

你现在的密码过期alert会触发3次,是因为提醒逻辑被放在了登录流程三个都会执行的渲染/逻辑节点上,代码每跑到对应节点就会执行一次alert,没有做单次触发的拦截。

解决方法

核心做两件事:

  • 给提醒逻辑加单次执行的标记,保证同一次登录流程里只会触发一次
  • 把提醒代码从三个触发节点全部移除,只放到你选定的触发时机(首次登录后/登录确认时)的对应位置

推荐用sessionStorage做标记存储:它的生命周期和当前标签页绑定,同一次登录流程里标记不会丢失,关闭标签页后自动清除,下次登录还能正常触发提醒,不会出现永久不弹的问题。

可直接复用的代码

先把公共逻辑抽出来,替换你原来的pwdDaysToExpire相关代码:

function pwdDaysToExpire() {
    const userData = getStoredUserData();
    const { pwdLastSet } = userData;
    const datepwdLastSet = new Date(pwdLastSet).getTime();
    const dateNow = new Date().getTime();
    const diffInDays = Math.ceil((dateNow - datepwdLastSet) / (1000 * 3600 * 24));
    return diffInDays;
}

function triggerPwdExpireAlert() {
  // 已经弹过直接终止逻辑
  if (sessionStorage.getItem('pwd_alert_shown') === '1') return
  const leftDays = 90 - pwdDaysToExpire()
  if (pwdDaysToExpire() >=76 && leftDays > 0) {
    alert(`YOUR PASSWORD WILL EXPIRE IN ${leftDays} DAYS`)
    // 标记已弹出,后续不会再触发
    sessionStorage.setItem('pwd_alert_shown', '1')
  }
}

触发时机配置

  • 选首次登录后触发:找到首次登录成功、拿到用户信息后的回调函数,在里面加一句triggerPwdExpireAlert()即可,另外两个登录流程节点不要放这段调用
  • 选登录确认时触发:找到用户点击登录确认、账号密码校验通过、即将跳转系统主页前的逻辑位置,在里面加triggerPwdExpireAlert(),其余节点删除相关代码

补充:如果你需要用户每天第一次登录才弹一次、跨标签页也不重复弹,可以把sessionStorage换成localStorage,存储标记的时候带上当天日期,日期不匹配才触发提醒即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 15:31:57