public async Task <IHttpActionResult> PostForgot(JObject value) { var email = (string)value["email"]; if (!String.IsNullOrEmpty(email)) { var user = await OwinUserManager.FindByEmailAsync(email.Trim()); if (user != null) { if (await OwinUserManager.IsEmailConfirmedAsync(user.Id)) { // Send the link. var token = await OwinUserManager.GeneratePasswordResetTokenAsync(user.Id); var queryString = AccountUtils.GetMailLinkQueryString(token, user.Id); var host = Request.RequestUri.GetComponents(UriComponents.Host, UriFormat.Unescaped); var link = "https://" + host + "/account/reset-password?" + queryString; await EmailUtils.SendPasswordResetEmailAsync(email, link); } } } return(StatusCode(HttpStatusCode.NoContent)); }
/// <summary> /// Send the confirmation link in background /// </summary> /// <param name="email"></param> /// <param name="userId"></param> /// <param name="confirmationToken"></param> /// <param name="currentRequestUri">It is used to determine the server address (production/development) where the confirmation link should point</param> public async Task SendConfirmationEmail(string email, int userId, string displayName, string confirmationToken, Uri currentRequestUri) //public void SendConfirmationEmailInBackground(string email, int userId, string displayName, string confirmationToken, Uri currentRequestUri) { var queryString = AccountUtils.GetMailLinkQueryString(confirmationToken, userId); var host = currentRequestUri.GetComponents(UriComponents.Host, UriFormat.Unescaped); var link = "http://" + host + "/account/confirm-email?" + queryString; // TODO If the task fails, we will lose the message. The proper solution is to place the message into a reliable queue. //HostingEnvironment.QueueBackgroundWorkItem(ct => EmailUtils.SendConfirmationEmailAsync(email, displayName, link)); await EmailUtils.SendConfirmationEmailAsync(email, displayName, link); }
public async Task <IHttpActionResult> PutEmail(JObject value) { var userId = this.GetUserId(); // TODO. Store the old confirmed email. To replace a confirmed email with an unconfirmed one is a bed idea. But we have no infrastructure currently to store an unconfirmed email temporarily. if (await OwinUserManager.IsEmailConfirmedAsync(userId)) { return(BadRequest("Unable to change a confirmed email address.")); } var email = (string)value["email"]; if (String.IsNullOrWhiteSpace(email)) { return(BadRequest()); } email = email.Trim(); var result = await OwinUserManager.SetEmailAsync(userId, email); if (result.Succeeded) { var confirmationToken = await OwinUserManager.GenerateEmailConfirmationTokenAsync(userId); var queryString = AccountUtils.GetMailLinkQueryString(confirmationToken, userId); var host = Request.RequestUri.GetComponents(UriComponents.Host, UriFormat.Unescaped); var link = "http://" + host + "/account/confirm-email?" + queryString; var displayName = this.GetUserDisplayName(); await EmailUtils.SendVerificationEmailAsync(email, displayName, link); return(StatusCode(HttpStatusCode.NoContent)); } else { return(BadRequest(result.PlainErrorMessage("Failed to change email address."))); } }