public virtual async Task SendPasswordResetLinkAsync( IdentityUser user, string resetToken, string appName, string returnUrl = null, string returnUrlHash = null) { Debug.Assert(CurrentTenant.Id == user.TenantId, "This method can only work for current tenant!"); var url = await AppUrlProvider.GetResetPasswordUrlAsync(appName); var link = $"{url}?userId={user.Id}&tenantId={user.TenantId}&resetToken={UrlEncoder.Default.Encode(resetToken)}"; if (!returnUrl.IsNullOrEmpty()) { link += "&returnUrl=" + NormalizeReturnUrl(returnUrl); } if (!returnUrlHash.IsNullOrEmpty()) { link += "&returnUrlHash=" + returnUrlHash; } var emailContent = await TemplateRenderer.RenderAsync( AccountEmailTemplates.PasswordResetLink, new { link = link } ); await EmailSender.SendAsync( user.Email, StringLocalizer["PasswordReset"], emailContent ); }
public virtual async Task <IActionResult> OnGetAsync() { ProfileManagementPageCreationContext = new ProfileManagementPageCreationContext(ServiceProvider); foreach (var contributor in Options.Contributors) { await contributor.ConfigureAsync(ProfileManagementPageCreationContext); } if (ReturnUrl != null) { if (!Url.IsLocalUrl(ReturnUrl) && !ReturnUrl.StartsWith(UriHelper.BuildAbsolute(Request.Scheme, Request.Host, Request.PathBase).RemovePostFix("/")) && !AppUrlProvider.IsRedirectAllowedUrl(ReturnUrl)) { ReturnUrl = null; } } return(Page()); }