//Retrieves user ID of user that is logged in. public int GetUserID() { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); RunGreenLakeUser user = _context.Users.Find(userId); var currid = user.LinkID; return(currid); }
public async Task <IActionResult> OnPostConfirmationAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); // Get the information about the user from the external login provider var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { ErrorMessage = "Error loading external login information during confirmation."; return(RedirectToPage("./Login", new { ReturnUrl = returnUrl })); } if (ModelState.IsValid) { var user = new RunGreenLakeUser { UserName = Input.Email, Email = Input.Email }; var result = await _userManager.CreateAsync(user); if (result.Succeeded) { result = await _userManager.AddLoginAsync(user, info); if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent : false); _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider); var userId = await _userManager.GetUserIdAsync(user); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { area = "Identity", userId = userId, code = code }, protocol: Request.Scheme); await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>."); return(LocalRedirect(returnUrl)); } } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } LoginProvider = info.LoginProvider; ReturnUrl = returnUrl; return(Page()); }
private async Task LoadAsync(RunGreenLakeUser user) { var email = await _userManager.GetEmailAsync(user); Email = email; Input = new InputModel { NewEmail = email, }; IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user); }
private async Task LoadAsync(RunGreenLakeUser user) { var userName = await _userManager.GetUserNameAsync(user); var phoneNumber = await _userManager.GetPhoneNumberAsync(user); Username = userName; Input = new InputModel { FirstName = user.FirstName, LastName = user.LastName, PhoneNumber = phoneNumber }; }
private async Task LoadSharedKeyAndQrCodeUriAsync(RunGreenLakeUser user) { // Load the authenticator key & QR code URI to display on the form var unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user); if (string.IsNullOrEmpty(unformattedKey)) { await _userManager.ResetAuthenticatorKeyAsync(user); unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user); } SharedKey = FormatKey(unformattedKey); var email = await _userManager.GetEmailAsync(user); AuthenticatorUri = GenerateQrCodeUri(email, unformattedKey); }
public async Task <IActionResult> Create([Bind("FirstName,LastName")] RunGreenLakeUser user) { try { if (ModelState.IsValid) { _context.Add(user); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } } catch (DbUpdateException /* ex */) { //Log the error (uncomment ex variable name and write a log. ModelState.AddModelError("", "Cannot save new User." + "Try again, check that your entry information is correct."); } return(View(user)); }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { RaceTypeList = new List <SelectListItem>() { new SelectListItem() { Text = "One Mile", Value = "1" }, new SelectListItem() { Text = "5 Kilometers", Value = "2" }, new SelectListItem() { Text = "10 Kilometers", Value = "3" }, new SelectListItem() { Text = "Half-Marathon", Value = "4" }, new SelectListItem() { Text = "Full-Marathon", Value = "5" } }; returnUrl = returnUrl ?? Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); if (ModelState.IsValid) { //Calculate total and mile time. int totalTime = Input.RaceTimeHours * 3600 + Input.RaceTimeMinutes * 60 + Input.RaceTimeSeconds; var mileTime = Functions.GetMileTime(totalTime, Input.RaceType); //Check if 1 mile time is absurd. if (mileTime > 223) { var user = new RunGreenLakeUser { UserName = Input.Email, Email = Input.Email, FirstName = Input.Firstname, LastName = Input.Lastname, EmailConfirmed = true }; //bundle registration transaction using (var registrationTransaction = _context.Database.BeginTransaction()) { try { //Create user profile, which will generate a "Link ID" var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { //Create profile entry. var profile = new rungreenlake.Models.Profile { ProfileID = user.LinkID, CreationDate = DateTime.Now, LinkID = user.LinkID }; //Create initial time entry. var race = new RaceRecord { RaceType = Input.RaceType, RaceTime = totalTime, ProfileID = user.LinkID, MileTime = mileTime }; _context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Profiles ON"); _context.Add(profile); _context.SaveChanges(); _context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Profiles OFF"); _context.Add(race); _context.SaveChanges(); registrationTransaction.Commit(); await _signInManager.SignInAsync(user, isPersistent : false); return(LocalRedirect(returnUrl)); //return RedirectToAction("Success", "Home"); } else { foreach (var error in result.Errors) { ModelState.AddModelError("", error.Description); } } } catch (Exception ex) { registrationTransaction.Rollback(); ModelState.AddModelError("", "Unable to register, please contact your administrator for more details."); } } } else { ModelState.AddModelError("", "Wow, you must be fast! Unfortnately your mile time must be greater than 3:43!"); } /* * * EMAIL CONFIRMATION, TEMPORARILY BYPASSED * if (result.Succeeded) * { * _logger.LogInformation("User created a new account with password."); * * var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); * code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); * var callbackUrl = Url.Page( * "/Account/ConfirmEmail", * pageHandler: null, * values: new { area = "Identity", userId = user.Id, code = code }, * protocol: Request.Scheme); * * await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", * $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>."); * * if (_userManager.Options.SignIn.RequireConfirmedAccount) * { * return RedirectToPage("RegisterConfirmation", new { email = Input.Email }); * } * else * { * await _signInManager.SignInAsync(user, isPersistent: false); * return LocalRedirect(returnUrl); * } * } * foreach (var error in result.Errors) * { * ModelState.AddModelError(string.Empty, error.Description); * } */ } // If we got this far, something failed, redisplay form return(Page()); }