public async Task <IActionResult> Register(RegisterViewModel model) { if (model?.Code == null || !AuthCodes.Contains(model.Code)) { ModelState.AddModelError("", "Недействительная ссылка регистрации"); return(View(model)); } if (UserRepository.GetAll().Any(u => u.Username.ToLower() == model.Login.ToLower())) { ModelState.AddModelError("", "Имя пользователя занято"); } if (model.Password != model.ConfirmPassword) { ModelState.AddModelError("", "Пароли не совпадают"); } if (!ModelState.IsValid) { return(View(model)); } User user = new User //Создание пользователя { Username = model.Login, FirstName = "Имя", SecondName = "Фамилия", ThirdName = "Отчество", PasswordHash = HashingProvider.Hash(model.Password) }; var role = await RoleRepository.GetAll().FirstAsync(r => r.Name == "Пользователь"); user.Roles.Add(role); lock (AuthCodes) //После создания пользователя удаляем одноразовый код { AuthCodes.Remove(model.Code); } await UserRepository.Add(user); string token = await AuthenticationProvider.LoginAsync(model.Login, model.Password, TimeSpan.FromMinutes(30)); //Добавляем пользователя в хранилище и генерируем ему токен доступа HttpContext.Response.Cookies.Append("auth_token", token); return(RedirectToAction("Index", "Items")); }
public IActionResult Register(string code) { if (code == null || !AuthCodes.Contains(code)) { return(Content("Недействительная ссылка")); } var vm = new RegisterViewModel { Code = code }; return(View(vm)); }
protected override string OnAuthenticate(string username, string password, out AuthCodes authCode, out AuthOptions authOptions) { using (var db = ServiceUtils.CreateDbContext()) { //Find the company based on the unique user name EfParaquickCompany efCompany = (from c in db.ParaquickCompanies where c.UserName == username && c.Password == password select c).FirstOrDefault(); if (efCompany != null) { authOptions = new AuthOptions(); EfParaquickSession efSession = ServiceUtils.FindNextSession(db, efCompany.Id); //work to do? if (efSession != null) { //allow implementors to override authCode = OnNewSession(db, efSession, authOptions); if (authCode == AuthCodes.VALID) { //open and return ticket ServiceUtils.Open(db, efSession); return(efSession.Ticket); } else { //implementors can override the code and the options //but not the session record or the ticket return(ServiceUtils.ZeroTicket); } } else { //nothing to do authCode = AuthCodes.NONE; } } else { //bad credentials Error($"Incorrect username or password for user ({username})"); authCode = AuthCodes.NVU; } authOptions = null; return(ServiceUtils.ZeroTicket); } }
public async Task <IActionResult> GetRegistrationLink(int count) { var user = await Authorize(); if (!user.Roles.Any(r => r.Name == "Администратор")) //Для генерации нужны права администратора { return(Unauthorized()); } List <string> links = new List <string>(); if (count < 0) //Ограничение значкений между 0 и 100 { count = 0; } else if (count > 100) { count = 100; } for (int i = 0; i < count; i++) //Генерируем указанное количество guid и ссылки на регистрацию с нужным параметром { string guid = Guid.NewGuid().ToString(); string code = HttpUtility.UrlEncode(guid); string link = Url.ActionLink(nameof(Register), "Auth", new { code = code }); lock (AuthCodes) { AuthCodes.Add(code); //Добавляем код } links.Add(link); } return(View(links)); }
protected abstract string OnAuthenticate(string username, string password, out AuthCodes authCode, out AuthOptions authOptions);