public void AttemptToVerify(AccountEmailAddress emailAddress, EmailVerificationToken token) { _emailSender.SendEmail( new Email() { Recipient = emailAddress.EmailAddress, Subject = "Email Address Verification", EmailBodyType = EmailBodyType.HTML, Body = $"your token : {token.VerificationToken}" }); }
public IHttpActionResult SignUp([FromBody] SignUpRequest request) { try { User user = (from u in db.Users where u.Username == request.Username select u).FirstOrDefault(); if (user != null) { return(Ok(new { Success = false, Message = "That username is already taken." })); } user = (from u in db.Users where u.Email == request.Email select u).FirstOrDefault(); if (user != null) { return(Ok(new { Success = false, Message = "An account with that email already exists." })); } user = new User() { Username = request.Username, Password = request.Password, Email = request.Email, IsEmailVerified = false }; db.Users.Add(user); db.SaveChanges(); // Send this user a verification email. EmailVerificationToken token = user.SendVerificationEmail(); db.EmailVerificationTokens.Add(token); db.SaveChanges(); return(Ok(new { Success = true, User = user })); } catch (Exception ex) { return(InternalServerError(ex)); } }
public HttpResponseMessage VerifyEmail(string token) { try { // Remove the expired tokens. DateTime exactlyOneDayAgo = DateTime.Now.AddDays(-1); db.EmailVerificationTokens.RemoveRange(from evt in db.EmailVerificationTokens where evt.CreatedAt < exactlyOneDayAgo select evt); // The api will url-decode the token in the url, so we have to encode it again when we do our comparison. token = WebUtility.UrlEncode(token); EmailVerificationToken emailToken = (from evt in db.EmailVerificationTokens where evt.Token == token select evt).FirstOrDefault(); if (emailToken is null) { return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Email verification token could not be found or has expired.")); } User user = db.Users.Find(emailToken.UserId); if (user is null) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "The user for this token no longer exists.")); } user.IsEmailVerified = true; db.SaveChanges(); HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(LoadEmailVerifiedHtml()) }; response.Content.Headers.ContentType.MediaType = "text/html"; return(response); } catch (Exception ex) { return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex)); } }
public IHttpActionResult SendVerificationEmail(int userId) { try { User user = db.Users.Find(userId); if (user is null) { return(NotFound()); } EmailVerificationToken token = user.SendVerificationEmail(); db.EmailVerificationTokens.Add(token); db.SaveChanges(); return(Ok()); } catch (Exception ex) { return(InternalServerError(ex)); } }
public EmailVerificationToken InitiateEmailVerification(int userId) { // if there is a previous token for the user, delete it var token = AppContext.EmailVerificationTokens.Where(t => t.UserId == userId).FirstOrDefault(); if (token != null) { AppContext.EmailVerificationTokens.Remove(token); } // generate a new token var newToken = Guid.NewGuid().ToString(); var Token = new EmailVerificationToken() { UserId = userId, CreateTime = DateTime.Now, ExpiryTime = DateTime.Now.AddDays(1), Token = newToken, Used = false }; AppContext.EmailVerificationTokens.Add(Token); return(Token); }