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); }
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}); } }