【问题标题】:aws cognito redirect after user confirmation用户确认后 aws cognito 重定向
【发布时间】:2021-06-02 18:01:14
【问题描述】:

我已遵循此堆栈溢出问题的所有解决方案和答案 How to redirect after confirm amazon cognito using confirmation URL?

但我收到此错误

{"errorType":"TypeError","errorMessage":"Cannot read property 'code' of undefined","trace":["TypeError: Cannot read property 'code' of undefined","    at Runtime.module.exports.handler (/var/task/index.js:10:54)","    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"]}

自定义消息 lambda 代码为:

exports.handler = (event, context, callback) => {
    // Identify why was this function invoked
    if(event.triggerSource === "CustomMessage_SignUp") {
        console.log('function triggered');
        console.log(event);
        // Ensure that your message contains event.request.codeParameter. This is the placeholder for code that will be sent
        const { codeParameter } = event.request
        const { userName, region } = event
        const { clientId } = event.callerContext
        const { email } = event.request.userAttributes
        const url = 'https://xxxxxxxxx.execute-api.ap-southeast-1.amazonaws.com/confirm'
        const link = `<a href="${url}?code=${codeParameter}&username=${userName}&clientId=${clientId}&region=${region}&email=${email}" target="_blank">here</a>`
        event.response.emailSubject = "Your verification link"; // event.request.codeParameter
        event.response.emailMessage = `Thank you for signing up. Click ${link} to verify your email.`;
    }

    // Return to Amazon Cognito
    callback(null, event);
};

重定向 lambda 的代码是

'use strict';
var AWS = require('aws-sdk');
AWS.config.setPromisesDependency(require('bluebird'));
var CognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider({ apiVersion: '2016-04-19', region: process.env.REGION });

module.exports.handler = (req, context, callback) => {

  console.log('req');
  console.log(req);
  const confirmationCode = req.queryStringParameters.code
  const username = req.queryStringParameters.username
  const clientId = req.queryStringParameters.clientId
  const region = req.queryStringParameters.region
  const email = req.queryStringParameters.email

  let params = {
    ClientId: clientId,
    ConfirmationCode: confirmationCode,
    Username: username
  }

  var confirmSignUp = CognitoIdentityServiceProvider.confirmSignUp(params).promise()

  confirmSignUp.then(
    (data) => {
      let redirectUrl = process.env.POST_REGISTRATION_VERIFICATION_REDIRECT_URL;
      const response = {
        statusCode: 301,
        headers: {
          Location: redirectUrl,
        }
      };
    
      return callback(null, response);
    }
  ).catch(
    (error) => {
      callback(error)
    }
  )
}
  • customize_message lambda 由发送的 aws cognito 触发
    验证码
  • 重定向 lambda 由 API 网关触发

请帮忙 提前谢谢你

【问题讨论】:

    标签: amazon-web-services redirect amazon-cognito


    【解决方案1】:

    访问您的 req 参数时出现问题。尝试使用此代码

        'use strict';
    var AWS = require('aws-sdk');
    AWS.config.setPromisesDependency(require('bluebird'));
    var CognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider({ apiVersion: '2016-04-19', region: process.env.REGION });
    
    module.exports.handler = (req, context, callback) => {
    
      console.log('req');
      console.log(req);
      const confirmationCode = req.code;
      const username = req.username;
      const clientId = req.clientId;
      const region = req.region;
      const email = req.email;
    
      let params = {
        ClientId: clientId,
        ConfirmationCode: confirmationCode,
        Username: username
      }
    
      var confirmSignUp = CognitoIdentityServiceProvider.confirmSignUp(params).promise()
    
      confirmSignUp.then(
        (data) => {
          let redirectUrl = process.env.POST_REGISTRATION_VERIFICATION_REDIRECT_URL;
          const response = {
            statusCode: 301,
            headers: {
              Location: redirectUrl,
            }
          };
        
          return callback(null, response);
        }
      ).catch(
        (error) => {
          callback(error)
        }
      )
    }
    

    而不是你的代码。

    唯一的改变是代替这一切

    const confirmationCode = req.queryStringParameters.code;
    const username = req.queryStringParameters.username;
    const clientId = req.queryStringParameters.clientId;
    const region = req.queryStringParameters.region;
    const email = req.queryStringParameters.email;
    

    你需要使用这个

    const confirmationCode = req.code;
    const username = req.username;
    const clientId = req.clientId;
    const region = req.region;
    const email = req.email;
    

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 2021-02-19
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 2022-11-07
      • 2017-09-03
      相关资源
      最近更新 更多