C# 如何使用AWS cognito在.net上使用忘记密码自定义模板?
我正在使用cognito for for Fasted password发送一封自定义电子邮件。在没有触发器lambda的情况下,我需要在哪里设置代码?您唯一的选择是lambda函数,并将其附加到用户池中的常规设置->触发器->自定义消息 Lambda函数示例:C# 如何使用AWS cognito在.net上使用忘记密码自定义模板?,c#,.net-core,amazon-cognito,amazon-cognito-triggers,C#,.net Core,Amazon Cognito,Amazon Cognito Triggers,我正在使用cognito for for Fasted password发送一封自定义电子邮件。在没有触发器lambda的情况下,我需要在哪里设置代码?您唯一的选择是lambda函数,并将其附加到用户池中的常规设置->触发器->自定义消息 Lambda函数示例: exports.handler = (event, context, callback) => { // https://docs.aws.amazon.com/cognito/latest/developerguide/
exports.handler = (event, context, callback) => {
// https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-message.html
// dev
if(event.userPoolId === "YOUR USER POOL ID") {
// Identify why was this function invoked
if(event.triggerSource === "CustomMessage_ForgotPassword") {
if(event.request.userAttributes.locale === "fr-CA")
{
event.response.smsMessage = "Votre code de confirmation est: " + event.request.codeParameter;
event.response.emailSubject = "Code de confirmation";
event.response.emailMessage = "Votre code de confirmation: " + event.request.codeParameter + "<br/><br/>Veuillez visiter cette URL et fournir les informations demandées: ~your url~";
}
else
{
event.response.smsMessage = "Your confirmation code is: " + event.request.codeParameter;
event.response.emailSubject = "Confirmation Code";
event.response.emailMessage = "Your confirmation code: " + event.request.codeParameter + "<br/><br/>Please visit this url and provide the requested information: ~your url~";
}
}
// Create custom message for other events
}
// qa
// prod
// Return to Amazon Cognito
callback(null, event);
};
exports.handler=(事件、上下文、回调)=>{
// https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-message.html
//发展
如果(event.userPoolId==“您的用户池ID”){
//确定调用此函数的原因
如果(event.triggerSource==“CustomMessage\u ForgotPassword”){
if(event.request.userAttributes.locale==“fr CA”)
{
event.response.smsMessage=“Votre code de confirmation est:”+event.request.code参数;
event.response.emailSubject=“代码取消确认”;
event.response.emailMessage=“Votre code de confirmation:“+event.request.code参数+”
;
}
其他的
{
event.response.smsMessage=“您的确认代码是:”+event.request.codeParameter;
event.response.emailSubject=“确认代码”;
event.response.emailMessage=“您的确认代码:“+event.request.codeParameter+”
请访问此url并提供所需信息:~您的url~”;
}
}
//为其他事件创建自定义消息
}
//质量保证
//刺激
//返回亚马逊Cognito
回调(null,事件);
};
忘记密码请求:-
public async Task<Result> ForgotPassword(string email)
{
using (var cognito = new AmazonCognitoIdentityProviderClient(AWSConnection.AWS_AccessKey, AWSConnection.AWS_SecretKey, AWSConnection.AWSRegion))
{
ListUsersRequest listUsersRequest = new ListUsersRequest();
listUsersRequest.UserPoolId = _openIdConnect.MetadataAddress.Split("/")[3];
listUsersRequest.Filter = string.Format("email = \"{0}\"", email.ToLower()); //Get Data by Email from UserPool
ListUsersResponse listUsersResponse = await cognito.ListUsersAsync(listUsersRequest);
if (listUsersResponse.Users.Any())
{
ForgotPasswordRequest forgotPasswordRequest = new ForgotPasswordRequest();
forgotPasswordRequest.Username = listUsersResponse.Users.Select(x => x.Username).FirstOrDefault();
forgotPasswordRequest.ClientId = _openIdConnect.ClientId;
ForgotPasswordResponse forgotPasswordResponse = await cognito.ForgotPasswordAsync(forgotPasswordRequest).ConfigureAwait(false);
return Result.Execute(StatusCodes.Status200OK, GlobalMessages.FETCH_SUCCESS, forgotPasswordResponse);
}
else
{
return Result.Execute(StatusCodes.Status200OK, GlobalMessages.UserNotFound);
}
}
}
lambda函数中的模型:-
public class CallerContext
{
public string awsSdkVersion { get; set; }
public string clientId { get; set; }
}
public class UserAttributes
{
public string sub { get; set; }
public string email_verified { get; set; }
public string name { get; set; }
public string phone_number_verified { get; set; }
public string phone_number { get; set; }
public string email { get; set; }
}
public class Request
{
public UserAttributes userAttributes { get; set; }
public string codeParameter { get; set; } = "####";
public string linkParameter { get; set; }
public object usernameParameter { get; set; }
}
public class Response
{
public object smsMessage { get; set; }
public object emailMessage { get; set; }
public object emailSubject { get; set; }
}
public class RootObject
{
public string version { get; set; }
public string region { get; set; }
public string userPoolId { get; set; }
public string userName { get; set; }
public CallerContext callerContext { get; set; }
public string triggerSource { get; set; }
public Request request { get; set; }
public Response response { get; set; }
}
确认忘记密码:-
public async Task<Result> ConfirmForgotPassword(ConfirmForgotPasswordDTO confirmForgotPasswordDTO)
{
using (var cognito = new AmazonCognitoIdentityProviderClient(AWSConnection.AWS_AccessKey, AWSConnection.AWS_SecretKey, AWSConnection.AWSRegion))
{
ConfirmForgotPasswordRequest confirmForgotPasswordRequest = new ConfirmForgotPasswordRequest();
confirmForgotPasswordRequest.Username = ConfirmForgotPasswordDTO.UserName;
confirmForgotPasswordRequest.ClientId = _openIdConnect.ClientId;
confirmForgotPasswordRequest.Password = confirmForgotPasswordDTO.Password;
confirmForgotPasswordRequest.ConfirmationCode = confirmForgotPasswordDTO.ConfirmationCode;
ConfirmForgotPasswordResponse confirmForgotPasswordResponse = new ConfirmForgotPasswordResponse();
string message = string.Empty;
try
{
confirmForgotPasswordResponse = await cognito.ConfirmForgotPasswordAsync(confirmForgotPasswordRequest).ConfigureAwait(false);
}
catch (ExpiredCodeException ex)
{
message = ex.Message;
}
catch (InvalidPasswordException ex)
{
message = ex.Message;
}
catch (Amazon.CognitoIdentityProvider.Model.LimitExceededException ex)
{
message = ex.Message;
}
catch (UserNotFoundException ex)
{
message = ex.Message;
}
catch (UserNotConfirmedException ex)
{
message = ex.Message;
}
if (confirmForgotPasswordResponse.HttpStatusCode == HttpStatusCode.OK)
{
return Result.Execute(StatusCodes.Status200OK, GlobalMessages.PasswordChangedSuccessfully, confirmForgotPasswordResponse);
}
return Result.Execute(StatusCodes.Status400BadRequest, message);
}
}
您必须触发customMessage\u ForgotPassword lambda。
public async Task<Result> ConfirmForgotPassword(ConfirmForgotPasswordDTO confirmForgotPasswordDTO)
{
using (var cognito = new AmazonCognitoIdentityProviderClient(AWSConnection.AWS_AccessKey, AWSConnection.AWS_SecretKey, AWSConnection.AWSRegion))
{
ConfirmForgotPasswordRequest confirmForgotPasswordRequest = new ConfirmForgotPasswordRequest();
confirmForgotPasswordRequest.Username = ConfirmForgotPasswordDTO.UserName;
confirmForgotPasswordRequest.ClientId = _openIdConnect.ClientId;
confirmForgotPasswordRequest.Password = confirmForgotPasswordDTO.Password;
confirmForgotPasswordRequest.ConfirmationCode = confirmForgotPasswordDTO.ConfirmationCode;
ConfirmForgotPasswordResponse confirmForgotPasswordResponse = new ConfirmForgotPasswordResponse();
string message = string.Empty;
try
{
confirmForgotPasswordResponse = await cognito.ConfirmForgotPasswordAsync(confirmForgotPasswordRequest).ConfigureAwait(false);
}
catch (ExpiredCodeException ex)
{
message = ex.Message;
}
catch (InvalidPasswordException ex)
{
message = ex.Message;
}
catch (Amazon.CognitoIdentityProvider.Model.LimitExceededException ex)
{
message = ex.Message;
}
catch (UserNotFoundException ex)
{
message = ex.Message;
}
catch (UserNotConfirmedException ex)
{
message = ex.Message;
}
if (confirmForgotPasswordResponse.HttpStatusCode == HttpStatusCode.OK)
{
return Result.Execute(StatusCodes.Status200OK, GlobalMessages.PasswordChangedSuccessfully, confirmForgotPasswordResponse);
}
return Result.Execute(StatusCodes.Status400BadRequest, message);
}
}
public class ConfirmForgotPasswordDTO
{
public string ConfirmationCode { get; set; }
public string UserName { get; set; }
public string Password { get; set; }