我使用相同的Cognito用户池处理来自多个域的网站的项目。我为验证和忘记密码电子邮件配置了自定义消息触发器,我需要在消息正文上添加一个链接,将用户重定向到发送请求的域。有没有办法让referer请求?
答案 0 :(得分:0)
我不这么认为。自定义消息lambda触发器使用事件对象和事件对象获取这些信息,如this docs&我的测试是这样的:
{
"version": "1",
"region": "us-east-1",
"userPoolId": "us-east-1_xxxxxxxx",
"userName": "myuser",
"callerContext": {
"awsSdkVersion": "aws-sdk-unknown-unknown",
"clientId": "xxxxxxxxxxxxxxxxxxxxxxxx"
},
"triggerSource": "CustomMessage_ForgotPassword",
"request": {
"userAttributes": {
"sub": "xxxxxxxx-xxxx-xxxx-ad88-da626e7b6496",
"email_verified": "true",
"cognito:user_status": "CONFIRMED",
"nickname": "nick",
"name": "myname",
"email": "email@example.com"
},
"codeParameter": "{####}",
"usernameParameter": null
},
"response": {
"smsMessage": null,
"emailMessage": null,
"emailSubject": null
}
}
唯一(稍微)相关的信息是callerContext,但其值取决于用于调用ForgotPassword API的方法。试试这个&在SignUp lambda&中记录事件对象看看你是否得到了一些信息(我不认为你可以)。
答案 1 :(得分:0)
在我的脑海中,为什么不添加一个声明来指示请求来自哪个域。
或者在每个域的Cognito中创建一个客户端。
..我更喜欢索赔方式,感觉它是一个有用的声明,可以进一步发展。
答案 2 :(得分:0)
在忘记密码请求时,从APIGatewayProxyRequestEvent
的标头中获取引荐来源:有标头referer
。并且在创建ForgotPasswordRequest
时,将此引用设置为clientMetadata
:
public void resetPassword(String email, String referer) {
var forgotPasswordRequest = ForgotPasswordRequest.builder()
.username(email)
.clientId(COGNITO_USERS_POOL_APP_CLIENT_ID)
.secretHash(calculateSecretHash(email))
.clientMetadata(Map.of("referer", referer))
.build();
cognitoIdentityProviderClient.forgotPassword(forgotPasswordRequest);
}
然后在触发器处理程序中,只需检索此引用:
public Object handleRequest(Object event, Context context) {
JsonObject json = gson.toJsonTree(event).getAsJsonObject();
if ("CustomMessage_ForgotPassword".equals(json.get("triggerSource").getAsString())) {
var request = json.get("request").getAsJsonObject();
var clientMetadata = request.get("clientMetadata").getAsJsonObject();
var referer = clientMetadata.get("referer").getAsString();
// retrieve "codeParameter" and "email"
// create message
// set response "emailMessage", "emailSubject" and "smsMessage"
event = gson.fromJson(json, LinkedHashMap.class);
}
return event;
}