public async Task <IActionResult> PostUnLinkLogin(UnLinkLoginModel unlinkLoginModel) { var user = await _userManager.FindByIdAsync(User.Identity.GetUserId()); if (user == null) { throw new InvalidOperationException("Could not find user"); } var authType = (await _signInManager.GetExternalAuthenticationSchemesAsync()) .FirstOrDefault(x => x.Name == unlinkLoginModel.LoginProvider); if (authType == null) { _logger.LogWarning("Could not find external authentication provider registered: {LoginProvider}", unlinkLoginModel.LoginProvider); } else { BackOfficeExternaLoginProviderScheme opt = await _externalAuthenticationOptions.GetAsync(authType.Name); if (opt == null) { return(BadRequest($"Could not find external authentication options registered for provider {unlinkLoginModel.LoginProvider}")); } else { if (!opt.ExternalLoginProvider.Options.AutoLinkOptions.AllowManualLinking) { // If AllowManualLinking is disabled for this provider we cannot unlink return(BadRequest()); } } } var result = await _userManager.RemoveLoginAsync( user, unlinkLoginModel.LoginProvider, unlinkLoginModel.ProviderKey); if (result.Succeeded) { await _signInManager.SignInAsync(user, true); return(Ok()); } else { AddModelErrors(result); return(new ValidationErrorResult(ModelState)); } }
public async Task <HttpResponseMessage> PostUnLinkLogin(UnLinkLoginModel unlinkLoginModel) { var result = await UserManager.RemoveLoginAsync( User.Identity.GetUserId <int>(), new UserLoginInfo(unlinkLoginModel.LoginProvider, unlinkLoginModel.ProviderKey)); if (result.Succeeded) { var user = await UserManager.FindByIdAsync(User.Identity.GetUserId <int>()); await SignInManager.SignInAsync(user, isPersistent : true, rememberBrowser : false); return(Request.CreateResponse(HttpStatusCode.OK)); } else { AddModelErrors(result); return(Request.CreateValidationErrorResponse(ModelState)); } }
public async Task <HttpResponseMessage> PostUnLinkLogin(UnLinkLoginModel unlinkLoginModel) { var owinContext = TryGetOwinContext().Result; ExternalSignInAutoLinkOptions autoLinkOptions = null; var authType = owinContext.Authentication.GetExternalAuthenticationTypes().FirstOrDefault(x => x.AuthenticationType == unlinkLoginModel.LoginProvider); if (authType == null) { Logger.Warn <BackOfficeController>("Could not find external authentication provider registered: {LoginProvider}", unlinkLoginModel.LoginProvider); } else { autoLinkOptions = authType.GetExternalSignInAutoLinkOptions(); if (!autoLinkOptions.AllowManualLinking) { // If AllowManualLinking is disabled for this provider we cannot unlink return(Request.CreateResponse(HttpStatusCode.BadRequest)); } } var result = await UserManager.RemoveLoginAsync( User.Identity.GetUserId <int>(), new UserLoginInfo(unlinkLoginModel.LoginProvider, unlinkLoginModel.ProviderKey)); if (result.Succeeded) { var user = await UserManager.FindByIdAsync(User.Identity.GetUserId <int>()); await SignInManager.SignInAsync(user, isPersistent : true, rememberBrowser : false); return(Request.CreateResponse(HttpStatusCode.OK)); } else { AddModelErrors(result); return(Request.CreateValidationErrorResponse(ModelState)); } }