public async Task <ActionResult> Create(UserViewModel user) { if (ModelState.IsValid && ReCaptcha.Validate(ConfigurationManager.AppSettings["ReCaptcha:SecretKey"])) { // создаем переменную типа AppUser AppUser _user = new AppUser() { UserName = user.Name, Email = user.Email }; // Сохраняем в базу IdentityResult _result = await UserManager.CreateAsync(_user, user.Password); if (_result.Succeeded) { // Создаем корневую директорию пользователя _user.CreateMainFolder(); // Сохраняем это IdentityResult _res = await UserManager.UpdateAsync(_user); return(RedirectToAction("Index", "File")); } else { AddErrors(_result); } } var captchaLastErrors = ReCaptcha.GetLastErrors(this.HttpContext); if (captchaLastErrors == null) { ViewBag.Recaptcha = ReCaptcha.GetHtml(ConfigurationManager.AppSettings["ReCaptcha:SiteKey"]); } else { ViewBag.RecaptchaLastErrors = captchaLastErrors; } ViewBag.publicKey = ConfigurationManager.AppSettings["ReCaptcha:SiteKey"]; return(View(user)); }
/* * Некоторые соц сети(twitter) не дают информацию пользователя в виде его email. * У Facebook можно выудить это с помощью его API, но потом вылазит исключение связанное с @Html.AntiForgeryToken() в представлении. * Я нашел вариант исправить это, но не уверен, что оно будет обеспечивать безопасность приложения, поэтому будем просить пользователя * ввести почту и имя. Если будет возможность эту информацию будем вытягивать из ExternalLoginInfo.Email и ExternalLoginInfo.DefaultUserName. */ public async Task <ActionResult> ExternalLoginConfirmation(ExternalLoginViewModel model) { if (ModelState.IsValid) { ExternalLoginInfo info = await AuthManager.GetExternalLoginInfoAsync(); if (info == null) { return(RedirectToAction("Login")); } AppUser user = new AppUser { UserName = model.Name, Email = model.Email }; IdentityResult result = await UserManager.CreateAsync(user); if (result.Succeeded) { user.CreateMainFolder(); await UserManager.UpdateAsync(user); result = await UserManager.AddLoginAsync(user.Id, info.Login); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false); return(RedirectToAction("Index", "File")); } AddErrors(result); } else { AddErrors(result); } } return(View(model)); }