Amazon cognitoでユーザーの確認後に特定のURLにリダイレクトしたい。
ユーザーがサインアップすると、次のような確認リンクが記載された確認メールが届きます https:// <> .auth.us-west-2.amazoncognito.com/confirmUser?client_id = << >>&user_name = < <>>&confirmation_code = << >>
ユーザーが上記のリンクをクリックすると、確認ページにリダイレクトされます。
ユーザーの確認が完了すると、ページはアプリケーションにリダイレクトされます。
この問題を解決するためのアイデアを教えてください。
現在、このリダイレクトはメールの確認リンクを使用して行うことはできません。しばらく前にredirect_uriを確認URLに追加しようとしましたが、機能しません。
回避策
これらの値は https://your_domain.auth.us-west-2.amazoncognito.com/confirmUser?client_id=somevalue&user_name=some_user&confirmation_code=some_code にGETリクエストを行うバックエンドラムダに渡されます
成功した場合、API Gatewayから302 https://myapp.com を返します
これは、このような単純な要件に対する複雑な回避策であることを知っています。最適な方法は、機能要求を提起し、Cognito URLでredirect_uriをサポートすることを期待することです。
[〜#〜] edit [〜#〜]
ラムダコストを節約するには、APIでHTTPエンドポイントを使用し、地域の cognitoサービスエンドポイント にリクエストを行うこともできます。例:
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"
}
はい、これを機能リクエストとしてマークします。ただし、この時点で配達時間を見積もることはできません。
私はこれを@ agent420の上記の回答の助けを借りて動作させ、githubの問題を調べました https://github.com/aws-amplify/amplify-js/issues/612
したがって、ここに私が従った完全なプロセスがあります。
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);
};
メールは、event.response.emailSubject
およびevent.response.emailMessage
で指定された件名とメッセージと共に送信されます。ユーザーは、url
変数で指定されたURLにリダイレクトされます。
AWS APIGatewayを使用して、これにラムダを使用しました。以下は、301リダイレクトを使用したnodejsで記述したコードです。
'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)
}
)
}
環境変数REGION
およびPOST_REGISTRATION_VERIFICATION_REDIRECT_URL
を要件に応じて自分の値に置き換えます。