public ActionResult Confirm(string name, string securityCode) { int id = WebSecurity.GetUserId(name); // Pobranie usługobiorcy po identyfikatorze użytkownika (nie wiadomo, czy potwierdzany użytkownik jest usługodawcą, czy usługobiorcą) var customer = _customerRepo.GetCustomerByUserId(id); // Pobranie usługodawcy po identyfikatorze użytkownika (nie wiadomo, czy potwierdzany użytkownik jest usługodawcą, czy usługobiorcą) var provider = _serviceProviderRepo.GetServiceProviderByUserId(id); // Jeśli użytkownik nie jest usługodawcą lub usługobiorcą, to jest to błąd. if (customer == null && provider == null) { TempData["Error"] = "Błąd weryfikacji konta!"; return(RedirectToAction("Index", "Home")); } else { string hashDateInDatebase = string.Empty; if (customer != null) { hashDateInDatebase = Konto.CalculateConfirmationCode(name, customer.Email, customer.RegistrationDate); } else { hashDateInDatebase = Konto.CalculateConfirmationCode(name, provider.Email, provider.RegistrationDate); } // Jeżeli wyliczony kod zabezpieczający jest taki sam jak kod przesłany, to konto jest potwierdzone. if (securityCode.Equals(hashDateInDatebase, StringComparison.InvariantCultureIgnoreCase)) { if (provider != null) { // Potwierdzenie konta usługodawcy provider.IsConfirmed = true; _serviceProviderRepo.SaveChanges(); } else { // Potwierdzenie konta usługobiorcy customer.IsConfirmed = true; _customerRepo.SaveChanges(); } TempData["Message"] = "Pomyślnie potwierdzono adres e-mail!"; } else { // Jeżeli wyliczony kod zabezpieczający jest różny od kodu przesłanego to zwracany jest błąd. TempData["Error"] = "Błąd weryfikacji konta!"; } } return(RedirectToAction("Index", "Home")); }
public ActionResult Register(RegisterModel model, bool captchaValid) { if (captchaValid) { if (ModelState.IsValid) { try { // Utworzenie użytkownika przy pomocy mechanizmu SimpleMembership WebSecurity.CreateUserAndAccount(model.UserName, model.Password); int userId = WebSecurity.GetUserId(model.UserName); DateTime registrationDate = DateTime.Now; try { // Tworzenie usługodawcy. if (model.IsProvider) { // Utworzenie roli Usługodawca, jeśli jeszcze nie istnieje string roleName = ConfigurationManager.AppSettings["ProviderRole"]; if (!Roles.RoleExists(roleName)) { Roles.CreateRole(roleName); } // Dodanie użytkownika do roli Roles.AddUserToRole(model.UserName, roleName); // Utworzenie usługodawcy var provider = new ServiceProvider(); if (string.IsNullOrEmpty(model.Name)) { provider.Name = model.UserName; } else { provider.Name = model.Name; } provider.Email = model.Email; provider.UserId = userId; provider.ZipCode = model.ZipCode; provider.City = model.City; provider.Street = model.Street; provider.PhoneNumber = model.PhoneNumber; provider.RegistrationDate = registrationDate; // Zapisanie usługodawcy w bazie danych _serviceProviderRepo.Add(provider); _serviceProviderRepo.SaveChanges(); } else { // Tworzenie usługobiorcy // Utworzenie roli Usługobiorca, jeśli jeszcze nie istnieje string roleName = ConfigurationManager.AppSettings["CustomerRole"]; if (!Roles.RoleExists(roleName)) { Roles.CreateRole(roleName); } // Dodanie użytkownika do roli Roles.AddUserToRole(model.UserName, roleName); // Utworzenie usługobiorcy var customer = new Customer(); customer.LastName = model.LastName; customer.FirstName = model.FirstName; customer.Email = model.Email; customer.UserId = userId; customer.ZipCode = model.ZipCode; customer.City = model.City; customer.Street = model.Street; customer.RegistrationDate = registrationDate; // Zapisanie usługobiorcy w bazie danych _customerRepo.Add(customer); _customerRepo.SaveChanges(); } // Wygenerowanie linku potwierdzającego rejestrację konta w portalu przy użyciu klasy AccountHelper var confirmedUrl = string.Format("http://{0}{1}{2}", Request.Url.Host, (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port), Url.RouteUrl(new { controller = "Account", action = "Confirm", name = model.UserName, securityCode = Konto.CalculateConfirmationCode(model.UserName, model.Email, registrationDate) })); // Wygenerowanie treści e-maila, który zostanie wysłany do użytkownika z linkiem potwierdzającym rejestrację var mailContent = string.Format( "Witaj!\n\nUtworzyłeś nowe konto w serwisie Portal Usług.\nAdres e-mail: {0}\nData utworzenia: {1}\n\nLink potwierdzający założenie konta: {2}", model.Email, DateTime.Now, confirmedUrl); // Wysłanie e-maila przy użyciu klasy MailHelper Mail.SendEmail(model.Email, model.UserName, "Potwierdzenie konta", mailContent); TempData["Message"] = "Użytkownik został zarejestrowany. Potwierdź swoje konto linkiem w e-mailu."; return(RedirectToAction("Index", "Home")); } catch { // W razie niepowodzenia należy usunąć utworzone konto użytkownika ((SimpleMembershipProvider)Membership.Provider).DeleteAccount(model.UserName); TempData["Error"] = "Cos poszło nie tak!"; return(View()); } } catch (MembershipCreateUserException e) { ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); } } return(View(model)); } else { ModelState.AddModelError("Captcha", "Wpisany wynik jest niepoprawny."); return(View(model)); } }