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

自定义AWS Cognito登录与重置密码接口问题求助

问题:AWS Cognito自定义UI重置密码确认失败及错误信息获取问题

我参考StackOverflow方案实现自定义AWS Cognito登录与忘记密码UI,目前登录请求可正常发起并跳转,也能成功将重置密码验证码发送至邮箱,但重置密码确认请求始终无法正常工作,且API端点未返回明确的错误信息。登录接口虽能正常运行,但当用户凭证错误时,也无法获取合适的错误提示。

登录提交请求代码

exports.postLogin = async (req, res, next) => {
    const CLIENT_ID = req.query.client_id;
    const RESPONSE_TYPE = 'token';
    const REDIRECT_URI = encodeURIComponent(req.query.redirect_uri);
    const SCOPE = req.query.scope;
    const AUTH_DOMAIN = "<domain>.<region>.amazoncognito.com";
    const USERNAME = req.body.username;
    const PASSWORD = req.body.password
    const state = req.query.state;
    const XSRFTOKEN = req.body._csrf

    let form = {
        '_csrf': XSRFTOKEN,
        'username': `${USERNAME.toLowerCase()}`,
        'password': `${PASSWORD}`,
    }

    const formData = querystring.stringify(form);
    const contentLength = formData.length;

    console.log(formData)

    // Post CSRF Token and username/password to /login endpoint
    const codeRequestUrl = `https://${AUTH_DOMAIN}/login?response_type=${RESPONSE_TYPE}&client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URI}&state=${state}`;
    console.log(codeRequestUrl)
    request({
        headers: {
            'Content-Length': contentLength,
            'Content-Type': 'application/x-www-form-urlencoded',
            'Cookie': `XSRF-TOKEN=${XSRFTOKEN}; Path=/; Secure; HttpOnly; SameSite=Lax`,
        },
        uri: codeRequestUrl,
        body: formData,
        method: 'POST'
    }, (err, response, body) => {
        console.log(body)
        console.log(err);
        console.log(response.headers.location);
        console.log(response.statusCode)
        res.redirect(response.headers.location);
    });
};

重置密码确认提交请求代码

exports.postConfirmForgotPassword = async (req, res, next) => {
    const req_parsed = new Url(req.url);

    const CLIENT_ID = req.query.client_id;
    const RESPONSE_TYPE = 'token';
    const REDIRECT_URI = encodeURIComponent(req.query.redirect_uri);
    const AUTH_DOMAIN = "<domain>.<region>.amazoncognito.com";
    const USERNAME = req.body.username;
    const ConfirmationCode = req.body.code;
    const Password = req.body.password;
    const state = req.query.state;
    const XSRFTOKEN = req.body._csrf

    let form = {
        '_csrf': XSRFTOKEN,
        'confirmation-code': `${ConfirmationCode}`, // 我试过用'code'、'confirmationcode'作为键,但都没用
        'password': `${Password}`,
        'username': `${USERNAME}`
    }

    const formData = querystring.stringify(form);
    const contentLength = formData.length;

    console.log(formData)

    const codeRequestUrl = `https://${AUTH_DOMAIN}/confirmForgotPassword?response_type=${RESPONSE_TYPE}&client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URI}&state=${state}`;
    console.log(codeRequestUrl)
    request({
        headers: {
            'Content-Length': contentLength,
            'Content-Type': 'application/x-www-form-urlencoded',
            'Cookie': `XSRF-TOKEN=${XSRFTOKEN}; Path=/; Secure; HttpOnly; SameSite=Lax`,
        },
        uri: codeRequestUrl,
        body: formData,
        method: 'POST'
    }, (err, response, body) => {
        console.log(err);
        console.log(response.headers.location);
        console.log(response.statusCode)
        console.log(`/login${req_parsed.query}`)
        res.redirect(`/login${req_parsed.query}`);
    });
};

我还尝试了以下两种请求体格式,但均无效,且未找到Cognito相关的官方文档说明:

let form = {
    '_csrf': XSRFTOKEN,
    'code': `${ConfirmationCode}`, 
    'password': `${Password}`,
    'username': `${USERNAME}`
}

或

let form = {
    '_csrf': XSRFTOKEN,
    'confirmationcode': `${ConfirmationCode}`, 
    'password': `${Password}`,
    'username': `${USERNAME}`
}

此外,我按照AWS Cognito官方文档调用接口时,收到bad request错误:

const main = async () => {
    try {
        const AUTH_DOMAIN = "mydomain.regison.amazoncognito.com";
        const request_url = `https://${AUTH_DOMAIN}/confirmforgotPassword`;
        const payload = {
            ClientId:"CLIENT_ID",
            ConfirmationCode:"****",
            Password:"***********",
            Username:"user email id",
            SecretHash:"XSRFTOKEN"
        }
        const response = await axios.post(request_url, payload);
        console.log(response)
    } catch (e) {
        console.log(e)
    }

}

main()

现寻求帮助:如何解决重置密码确认请求失败的问题?以及如何获取上述API的明确错误信息?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:36:10