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

如何在WSO2身份服务器登录失败时记录用户名(自适应认证场景)

WSO2身份服务器自适应认证:登录失败时获取用户名

问题分析

你遇到的问题主要来自两个点:

  • 代码里存在拼写错误:userame应该是username
  • 登录失败场景下,context.currentKnownSubject还未初始化(仅登录成功后才会赋值),同时你找错了请求参数的存储位置(登录请求通常是POST方式,参数在请求体而非URL参数里)

解决方案

以下是几种可靠的获取登录失败用户名的方法:

方式1:从当前认证步骤的subject字段获取

在步骤1(认证步骤)失败时,尝试登录的用户名会被记录在步骤上下文的subject中,这是WSO2自适应认证的标准获取方式:

var abc = function(context) {
    executeStep(1, {
        onSuccess: function (context) {
            var user = context.currentKnownSubject;
        },
        onFail: function (context){
            // 获取当前步骤尝试登录的用户名
            var username = context.steps[1].subject;
            if (username) {
                // 这里添加记录逻辑,比如写入日志
                Log.info("登录失败的用户名:" + username);
            }
        }
    });
};

方式2:从请求体中获取(适配POST表单登录场景)

如果你的登录请求是通过POST表单提交的,用户名参数会存储在请求体里:

var abc = function(context) {
    executeStep(1, {
        onSuccess: function (context) {
            var user = context.currentKnownSubject;
        },
        onFail: function (context){
            // 修正拼写错误,从request.body获取参数
            var username = context.request.body.username;
            if (username) {
                Log.info("登录失败的用户名:" + username);
            }
        }
    });
};

方式3:从URL参数获取(仅适用于GET请求场景)

如果你的登录请求是GET方式(不推荐生产环境使用),修正拼写错误后可从params获取:

var abc = function(context) {
    executeStep(1, {
        onSuccess: function (context) {
            var user = context.currentKnownSubject;
        },
        onFail: function (context){
            // 修正拼写错误,从URL参数获取
            var username = context.request.params.username;
            if (username) {
                Log.info("登录失败的用户名:" + username);
            }
        }
    });
};

关键提示

  • context.currentKnownSubject只有在用户认证成功后才会有有效数据,失败场景下为空,不能用来获取失败时的用户名
  • 优先使用context.steps[步骤编号].subject的方式,兼容性和可靠性最高
  • 区分请求方法:绝大多数登录场景用POST,参数在request.body;只有GET请求才会把参数放在request.params里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:50:44