예제 #1
0
        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));
            }
        }
예제 #2
0
        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));
            }
        }
예제 #3
0
        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));
            }
        }