/// <summary> /// Dieser Event Handler wird aufgerufen, sobald das "POST"-Event auslöst wird (hier durch Betätigung des "Hinzufügen"-Buttons).<para> /// Er erstellt auf Grundlage der eingegebenen Informationen einen neuen Benutzer.</para> /// </summary> /// <returns> /// Ein <see cref="IActionResult"/>, das bestimmt, wie nach Behandlung des Event vorgegangen werden soll. /// </returns> public async Task <IActionResult> OnPostAsync() { OnGet(); if (ModelState.IsValid) { IdentityUser user = new IdentityUser { UserName = Input.Email, Email = Input.Email }; byte[] password = new byte[32]; RandomNumberGenerator.Fill(password); string pwd = Convert.ToBase64String(password); IdentityResult result = await _userManager.CreateAsync(user, pwd); if (result.Succeeded) { string code = await _userManager.GeneratePasswordResetTokenAsync(user); string callbackUrl = $"http://{HttpContext.Request.Host}/Identity/Account/CreatePassword?userId={user.Id}&code={Uri.EscapeDataString(code)}"; if (!Program.SendMail( user.Email, new Name(user.Email, Input.Role.Equals(Resources.Student)), "Erstanmeldung", "Du wurdest zur Teilnahme an der Cafeteria-Bestellsoftware (CABESO) eingeladen. Klicke {0} zur Erstanmeldung.", (callbackUrl, "hier")) || !Program.MailValid(Input.Email)) { ModelState.AddModelError(string.Empty, "Die angegebene E-Mail-Adresse konnte nicht erreicht werden."); await _userManager.DeleteAsync(user); return(Page()); } await _userManager.AddToRoleAsync(user, Input.Role); if (Input.Role.Equals(Resources.Student)) { user.SetFormId(Input.FormId); } await _userManager.ConfirmEmailAsync(user, await _userManager.GenerateEmailConfirmationTokenAsync(user)); return(LocalRedirect("~/Admin/Index")); } foreach (IdentityError error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } return(Page()); }
/// <summary> /// Dieser Event Handler wird aufgerufen, sobald das "POST"-Event auslöst wird (hier durch Betätigung des "Registrieren"-Buttons).<para> /// Er verifiziert die Kontodaten, registriert im Erfolgsfall den neuen Benutzer und sendet eine E-Mail zur Bestätigung der E-Mail-Adresse.</para> /// </summary> /// <param name="returnUrl"> /// Die URL, zu der nach Beendigung der Registrierung zurückgekehrt werden soll /// </param> /// <returns> /// Ein <see cref="IActionResult"/>, das bestimmt, wie nach Behandlung des Event vorgegangen werden soll. /// </returns> public async Task <IActionResult> OnPostAsync(string returnUrl = null) { ReturnUrl = returnUrl ?? Url.Content("~/"); if (!Confirmed) //noch kein Registrierungscode eingegeben { return(RedirectToPage(new { code = Input.Code })); } ModelState.Remove("Input.Code"); if (ModelState.IsValid && Input.AgbAccepted && Input.PrivacyAccepted) { IdentityUser user = new IdentityUser { UserName = Input.Email, Email = Input.Email }; IdentityResult result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { string callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { userId = user.Id, code = await _userManager.GenerateEmailConfirmationTokenAsync(user) }, protocol: Request.Scheme); if (!Program.SendMail( Input.Email, new Name(user.Email, Role.Name.Equals(Resources.Student)), "E-Mail-Adresse bestätigen", "Bitte bestätige deine E-Mail-Adresse, indem du {0} klickst.", (callbackUrl, "hier")) || !Program.MailValid(Input.Email)) { ModelState.AddModelError(string.Empty, "Die angegebene E-Mail-Adresse konnte nicht erreicht werden."); await _userManager.DeleteAsync(user); return(Page()); } await _userManager.AddToRoleAsync(user, Role.Name); if (_userManager.Users.Count() == 1) //erster Benutzer muss Admin sein { await _userManager.AddToRoleAsync(user, Resources.Admin); } user.SetFormId(Input.FormId); _context.Codes.Remove(_context.Codes.Find(_code)); _context.SaveChanges(); Program.Alert = "Bitte überprüfe dein E-Mail-Postfach und bestätige deine E-Mail-Adresse!"; return(LocalRedirect(ReturnUrl)); } foreach (IdentityError error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } return(Page()); }