1414using Microsoft . AspNetCore . Http . Metadata ;
1515using Microsoft . AspNetCore . Identity ;
1616using Microsoft . AspNetCore . Identity . Data ;
17- using Microsoft . AspNetCore . Identity . UI . Services ;
1817using Microsoft . AspNetCore . WebUtilities ;
1918using Microsoft . Extensions . DependencyInjection ;
2019using Microsoft . Extensions . Options ;
@@ -45,7 +44,7 @@ public static IEndpointConventionBuilder MapIdentityApi<TUser>(this IEndpointRou
4544
4645 var timeProvider = endpoints . ServiceProvider . GetRequiredService < TimeProvider > ( ) ;
4746 var bearerTokenOptions = endpoints . ServiceProvider . GetRequiredService < IOptionsMonitor < BearerTokenOptions > > ( ) ;
48- var emailSender = endpoints . ServiceProvider . GetRequiredService < IEmailSender > ( ) ;
47+ var emailSender = endpoints . ServiceProvider . GetRequiredService < IEmailSender < TUser > > ( ) ;
4948 var linkGenerator = endpoints . ServiceProvider . GetRequiredService < LinkGenerator > ( ) ;
5049
5150 // We'll figure out a unique endpoint name based on the final route pattern during endpoint generation.
@@ -189,7 +188,6 @@ await signInManager.ValidateSecurityStampAsync(refreshTicket.Principal) is not T
189188 var finalPattern = ( ( RouteEndpointBuilder ) endpointBuilder ) . RoutePattern . RawText ;
190189 confirmEmailEndpointName = $ "{ nameof ( MapIdentityApi ) } -{ finalPattern } ";
191190 endpointBuilder . Metadata . Add ( new EndpointNameMetadata ( confirmEmailEndpointName ) ) ;
192- endpointBuilder . Metadata . Add ( new RouteNameMetadata ( confirmEmailEndpointName ) ) ;
193191 } ) ;
194192
195193 routeGroup . MapPost ( "/resendConfirmationEmail" , async Task < Ok >
@@ -216,8 +214,7 @@ await signInManager.ValidateSecurityStampAsync(refreshTicket.Principal) is not T
216214 var code = await userManager . GeneratePasswordResetTokenAsync ( user ) ;
217215 code = WebEncoders . Base64UrlEncode ( Encoding . UTF8 . GetBytes ( code ) ) ;
218216
219- await emailSender . SendEmailAsync ( resetRequest . Email , "Reset your password" ,
220- $ "Reset your password using the following code: { HtmlEncoder . Default . Encode ( code ) } ") ;
217+ await emailSender . SendPasswordResetCodeAsync ( user , resetRequest . Email , HtmlEncoder . Default . Encode ( code ) ) ;
221218 }
222219
223220 // Don't reveal that the user does not exist or is not confirmed, so don't return a 200 if we would have
@@ -416,8 +413,7 @@ async Task SendConfirmationEmailAsync(TUser user, UserManager<TUser> userManager
416413 var confirmEmailUrl = linkGenerator . GetUriByName ( context , confirmEmailEndpointName , routeValues )
417414 ?? throw new NotSupportedException ( $ "Could not find endpoint named '{ confirmEmailEndpointName } '.") ;
418415
419- await emailSender . SendEmailAsync ( email , "Confirm your email" ,
420- $ "Please confirm your account by <a href='{ HtmlEncoder . Default . Encode ( confirmEmailUrl ) } '>clicking here</a>.") ;
416+ await emailSender . SendConfirmationLinkAsync ( user , email , HtmlEncoder . Default . Encode ( confirmEmailUrl ) ) ;
421417 }
422418
423419 return new IdentityEndpointsConventionBuilder ( routeGroup ) ;
0 commit comments