自定义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
相关产品推荐
相关产品推荐

