public async Task <IActionResult> SignIn(SignInViewModel Model) { if (ModelState.IsValid) { BurgerStoreUser existingUser = await this._signInManager.UserManager.FindByNameAsync(Model.Email); if (existingUser != null) { Microsoft.AspNetCore.Identity.SignInResult passwordResult = this._signInManager.CheckPasswordSignInAsync(existingUser, Model.Password, false).Result; if (passwordResult.Succeeded) { this._signInManager.SignInAsync(existingUser, false).Wait(); return(RedirectToAction("Index", "Home")); } else { ModelState.AddModelError("PasswordIncorrect", "Username or Password is incorrect."); } } else { ModelState.AddModelError("UserDoesNotExist", "Username or Password is incorrect."); } } return(View()); }
[ValidateAntiForgeryToken] //this prevents automated scripts from trying to register public async Task <IActionResult> Register(RegisterViewModel model) { //Check to confirm that my register model is filled out correctly if (ModelState.IsValid) { //this is creating my new user. I simply used email only rather than username BurgerStoreUser newEmail = new BurgerStoreUser { UserName = model.Email, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, PhoneNumber = model.PhoneNumber }; IdentityResult creationResult = await this._signInManager.UserManager.CreateAsync(newEmail); if (creationResult.Succeeded) { IdentityResult passwordResult = await this._signInManager.UserManager.AddPasswordAsync(newEmail, model.Password); if (passwordResult.Succeeded) { Braintree.CustomerSearchRequest search = new Braintree.CustomerSearchRequest(); search.Email.Is(model.Email); var searchResult = await _braintreeGateway.Customer.SearchAsync(search); if (searchResult.Ids.Count == 0) { //creating a new braintree customer here await _braintreeGateway.Customer.CreateAsync(new Braintree.CustomerRequest { Email = model.Email, FirstName = model.FirstName, LastName = model.LastName, Phone = model.PhoneNumber }); } else { //update the existing braintree customer Braintree.Customer existingCustomer = searchResult.FirstItem; await _braintreeGateway.Customer.UpdateAsync(existingCustomer.Id, new Braintree.CustomerRequest { FirstName = model.FirstName, LastName = model.LastName, Phone = model.PhoneNumber }); } var confirmationToken = await _signInManager.UserManager.GenerateEmailConfirmationTokenAsync(newEmail); confirmationToken = System.Net.WebUtility.UrlEncode(confirmationToken); string currentUrl = Request.GetDisplayUrl(); System.Uri uri = new System.Uri(currentUrl); string confirmationUrl = uri.GetLeftPart(System.UriPartial.Authority); confirmationUrl += "/account/confirm?id=" + confirmationToken + "&userId=" + System.Net.WebUtility.UrlEncode(newEmail.Id); await this._signInManager.SignInAsync(newEmail, false); var emailResult = await this._emailService.SendEmailAsync(model.Email, "Welcome to Flavor Town Burgers", "<p> Thanks for signing up, " + model.Email + "!</p><p>< a href =\"" + confirmationUrl + "\">Confirm your account<a></p>", "Thanks for signing up, " + model.Email); if (emailResult.Success) { return(RedirectToAction("Index", "Home")); } else { return(BadRequest(emailResult.Message)); } } else { this._signInManager.UserManager.DeleteAsync(newEmail).Wait(); foreach (var error in passwordResult.Errors) { ModelState.AddModelError(error.Code, error.Description); } } } else { foreach (var error in creationResult.Errors) { ModelState.AddModelError(error.Code, error.Description); } } } return(View()); }