Je souhaite rediriger vers une URL spécifique après la confirmation de l'utilisateur dans Amazon cognito.
Lorsqu'un utilisateur s'inscrit, il recevra un e-mail de confirmation avec un lien de vérification comme suit https: // <> .auth.us-west-2.amazoncognito.com/confirmUser? Client_id = << >> & user_name = < <>> & confirmation_code = << >>
Si l'utilisateur clique sur le lien ci-dessus, il sera redirigé vers la page de confirmation.
Une fois la confirmation de l'utilisateur terminée, la page doit être redirigée vers mon application.
Veuillez me donner une idée pour résoudre ce problème.
Actuellement, cette redirection ne peut pas être effectuée à l'aide du lien de vérification dans l'e-mail. J'ai essayé d'ajouter redirect_uri à l'URL de vérification il y a quelque temps, mais cela ne fonctionne pas.
Solution
Ces valeurs sont transmises au backend lambda qui envoie une demande GET à https://your_domain.auth.us-west-2.amazoncognito.com/confirmUser?client_id=somevalue&user_name=some_user&confirmation_code=some_code
En cas de succès, renvoyez 302 https://myapp.com depuis votre passerelle API
Je sais que c'est une solution de contournement pour une exigence aussi simple. La meilleure façon serait de soulever une demande de fonctionnalité et d'espérer qu'ils prennent en charge une redirect_uri dans l'URL Cognito.
[~ # ~] modifier [~ # ~]
Pour économiser vos coûts lambda, vous pouvez également utiliser un point de terminaison HTTP dans votre API et faire une demande au point de terminaison du service cognito pour votre région. Exemple:
POST HTTP/1.1
Host: cognito-idp.us-east-1.amazonaws.com
x-amz-target: AWSCognitoIdentityProviderService.ConfirmSignUp
Content-Type: application/x-amz-json-1.1
{
"ClientId":"xxxxxxxxxxxxx",
"ConfirmationCode":"123456",
"Username":"username"
}
Oui, nous marquerons cela comme une demande de fonctionnalité. Cependant, nous ne pouvons pas estimer le délai de livraison à ce stade.
J'ai réussi à travailler avec l'aide de la réponse ci-dessus de @ agent420 et en examinant le problème github https://github.com/aws-amplify/amplify-js/issues/612
Voici donc le processus complet que j'ai suivi.
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://example.com/api/dev/user/confirm'
const link = `<a href="${url}?code=${codeParameter}&username=${userName}&clientId=${clientId}®ion=${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);
};
Votre e-mail vous sera envoyé avec l'objet et le message spécifiés dans event.response.emailSubject
et event.response.emailMessage
. L'utilisateur sera dirigé vers l'URL spécifiée dans la variable url
.
J'ai utilisé un lambda pour cela avec l'utilisation d'AWS APIGateway. Ci-dessous est le code que j'ai écrit dans nodejs où j'ai utilisé une redirection 301.
'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.verifyEmailAddress = (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)
}
)
}
Remplacer les variables d'environnement REGION
et POST_REGISTRATION_VERIFICATION_REDIRECT_URL
avec les valeurs de la vôtre selon l'exigence.