Ejemplo n.º 1
0
        public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
        {
            if (User.Identity.IsAuthenticated)
            {
                return RedirectToAction("Index", "Manage");
            }
            var info = await AuthenticationManager.GetExternalLoginInfoAsync();
            UserFields UserFields = new UserFields(info.ExternalIdentity);
            if (ModelState.IsValid)
            {
                // Получение сведений о пользователе от внешнего поставщика входа
                
                if (info == null)
                {
                    return View("ExternalLoginFailure");
                }
                                                
                var user = new ApplicationUser { UserName = model.ExternalLogin, Email = model.Email, Surname = UserFields.Surname, Givenname = UserFields.Givenname, Birthday = model.Birthday };

                //Подставим SID в качестве Id при наличии
                if(UserFields.Primarysid != "")
                {
                    user.Id = UserFields.Primarysid;
                }
                // Use your file here
                //if(model.File != null)
                //{
                //    MemoryStream memoryStream = new MemoryStream();
                //    model.File.InputStream.CopyTo(memoryStream);
                //    user.ImageData = memoryStream.ToArray();
                //}
                //if (model.File == null && UserFields.LinkImg != "") 
                //{
                //    //System.Net.WebClient wc = new System.Net.WebClient();
                //    //user.ImageData = wc.DownloadData("./UploadedFiles/ifempty.png");                    
                //}
                
                var result = await UserManager.CreateAsync(user);
                if (result.Succeeded)
                {
                    result = await UserManager.AddLoginAsync(user.Id, info.Login);
                    if (result.Succeeded)
                    {
                        await UserManager.AddToRoleAsync(user.Id, "user");
                        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
                        return RedirectToLocal(returnUrl);
                    }
                }
                AddErrors(result);
            }

            ViewBag.ReturnUrl = returnUrl;
            ViewBag.LoginProvider = info.Login.LoginProvider;
            model.UrlFile = UserFields.LinkImg;
            model.Givenname = UserFields.Givenname;
            return View(model);
        }
Ejemplo n.º 2
0
        public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
        {
            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
            if (loginInfo == null)
            {
                return RedirectToAction("Login");
            }

            UserFields UserFields = new UserFields(loginInfo.ExternalIdentity);

            // Выполнение входа пользователя посредством данного внешнего поставщика входа, если у пользователя уже есть имя входа
            var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
            switch (result)
            {
                case SignInStatus.Success:
                    return RedirectToLocal(returnUrl);
                case SignInStatus.LockedOut:
                    return View("Lockout");
                case SignInStatus.RequiresVerification:
                    return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
                case SignInStatus.Failure:
                default:
                    // Если у пользователя нет учетной записи, то ему предлагается создать ее
                    ViewBag.ReturnUrl = returnUrl;
                    ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
                    return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel(){ ExternalLogin = loginInfo.DefaultUserName, 
                        Email = loginInfo.Email, 
                        Givenname = UserFields.Givenname, 
                        Birthday = UserFields.Birthday});
            }
        }