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

如何在用户登录后根据其属性仅展示一次警告且维持登录状态?

问题根因

你的现有逻辑存在两个核心问题:

  • 触发警告时直接return终止流程,未完成后续的登录态下发逻辑,用户始终无法进入已登录状态
  • 没有记录警告已展示的状态标记,每次触发认证流都会重复执行校验、弹出警告
修正后的实现代码
function authenticate(context) {
    const session = context.getSession();
    // 先校验是否已经展示过警告,已展示则直接完成认证
    if (session.getNote("warning_has_shown") === "true") {
        context.success();
        return;
    }

    const targetAttribute = user.getFirstAttribute("someAttribute");
    if (!targetAttribute) {
        // 先给会话打标记,标记该警告已触发
        session.setNote("warning_has_shown", "true");
        // 弹出警告页,用户点击页面默认的「继续」按钮后会重新进入该认证脚本
        context.challenge(context.form().setInfo("you don't have some attribute", null).createInfoPage());
        return;
    }
    // 属性存在直接认证成功
    context.success();
}

如果需要展示中文警告,把setInfo的第一个参数修改为对应的中文提示即可。

逻辑说明
  • 新增了会话级标记warning_has_shown,同一登录会话内只会触发一次警告
  • 用户点击警告页的继续按钮后,再次进入认证脚本时会命中已展示标记的判断,直接走认证成功逻辑,正常下发登录态
  • 如果需要实现永久只展示一次的效果,可以把标记存储到用户属性而非会话中,修改对应读写逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 11:36:08