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));
        }
Beispiel #2
0
        /*
         * Некоторые соц сети(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));
        }