public async Task <IActionResult> OnGetLinkLoginCallbackAsync() { var user = await _userManager.GetUserAsync(); if (user == null) { return(NotFound("用户不存在!")); } var info = await _userManager.SignInManager.GetExternalLoginInfoAsync(user.Id.ToString()); if (info == null) { throw new InvalidOperationException("载入社会化登录失败!"); } var result = await _userManager.AddLoginAsync(user, info); if (!result.Succeeded) { throw new InvalidOperationException("添加社会化登录失败!"); } // Clear the existing external cookie to ensure a clean login process await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme); return(RedirectToSuccessPage($"已经成功绑定了{info.ProviderDisplayName}登录方式。")); }
public async Task <IActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl = null) { if (ModelState.IsValid) { // Get the information about the user from the external login provider var info = await _signInManager.GetExternalLoginInfoAsync(); if (info == null) { return(View("ExternalLoginFailure")); } var user = new User { UserName = model.Email, Email = model.Email }; var result = await _userManager.CreateAsync(user); if (result.Succeeded) { result = await _userManager.AddLoginAsync(user, info); if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent : false); _logger.LogInformation(6, "User created an account using {Name} provider.", info.LoginProvider); return(RedirectToLocal(returnUrl)); } } AddErrors(result); } ViewData["ReturnUrl"] = returnUrl; return(View(model)); }
// // GET: /Account/LinkLoginCallback public virtual async Task <ActionResult> LinkLoginCallback() { var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId()); if (loginInfo == null) { return(RedirectToAction("Manage", new { Message = ManageMessageId.Error })); } var result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login); if (result.Succeeded) { return(RedirectToAction("Manage")); } return(RedirectToAction("Manage", new { Message = ManageMessageId.Error })); }
public async Task <IActionResult> OnPostConfirmationAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); // Get the information about the user from the external login provider var info = await _userManager.SignInManager.GetExternalLoginInfoAsync(); if (info == null) { ErrorMessage = "确认社会化登录失败!"; return(RedirectToPage("./Login", new { ReturnUrl = returnUrl })); } if (ModelState.IsValid) { var user = new User(); user.UserName = Input.UserName; user.NormalizedUserName = _userManager.NormalizeKey(Input.LoginName); user.Email = Input.Email; var result = await _userManager.CreateAsync(user); if (result.Succeeded) { result = await _userManager.AddLoginAsync(user, info); if (result.Succeeded) { await _userManager.SignInManager.SignInAsync(user, isPersistent : false); Logger.LogInformation("用户通过 {Name} 新注册了一个用户。", info.LoginProvider); return(LocalRedirect(returnUrl)); } } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } ProviderDisplayName = info.ProviderDisplayName; ReturnUrl = returnUrl; return(Page()); }
public async Task <ActionResult> LinkLoginCallback() { var user = await GetCurrentUserAsync(); if (user == null) { return(View("Error")); } var info = await _signInManager.GetExternalLoginInfoAsync(await _userManager.GetUserIdAsync(user)); if (info == null) { return(RedirectToAction(nameof(ManageLogins), new { Message = ManageMessageId.Error })); } var result = await _userManager.AddLoginAsync(user, info); var message = result.Succeeded ? ManageMessageId.AddLoginSuccess : ManageMessageId.Error; return(RedirectToAction(nameof(ManageLogins), new { Message = message })); }
public async Task <User> GetUserToLogin(ExternalLoginInfo loginInfo) { var user = await _userManager.FindAsync(loginInfo.Login); if (user != null) { return(user); } user = await _userManager.FindByNameAsync(loginInfo.Email); if (user == null) { user = new User { Email = loginInfo.Email, IsActive = true }; await _userManager.CreateAsync(user); } await _userManager.AddLoginAsync(user.Id, loginInfo.Login); return(user); }
public async Task <ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl) { if (User.Identity.IsAuthenticated) { return(RedirectToAction("Index", "Manage")); } if (ModelState.IsValid) { // Get the information about the user from the external login provider var info = await AuthenticationManager.GetExternalLoginInfoAsync(); if (info == null) { return(View("ExternalLoginFailure")); } var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(user); if (result.Succeeded) { result = await UserManager.AddLoginAsync(user.Id, info.Login); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false); return(RedirectToLocal(returnUrl)); } } AddErrors(result); } ViewBag.ReturnUrl = returnUrl; return(View(model)); }