Example #1
0
        public async Task <IActionResult> LinkLoginCallback(string returnUrl)
        {
            var userModelResult = m_usersManager.GetUserById(int.Parse(User.Identity.GetSubjectId()));

            if (userModelResult.HasError)
            {
                ModelState.AddModelError(userModelResult.Error.Message);

                return(!returnUrl.IsNullOrEmpty() ? GetRedirectReturnAction(returnUrl, userModelResult.Error.Code) : View("Error"));
            }

            var user = m_mapper.Map <ApplicationUser>(userModelResult.Result);

            if (user == null)
            {
                return(!returnUrl.IsNullOrEmpty() ? GetRedirectReturnAction(returnUrl) : View("Error"));
            }

            var info = await m_signInManager.GetExternalLoginInfoAsync(
                await m_userStore.GetUserIdAsync(user, CancellationToken.None)
                );

            if (info == null)
            {
                return(!returnUrl.IsNullOrEmpty()
                    ? GetRedirectReturnAction(returnUrl)
                    : RedirectToAction(nameof(Edit), new { id = User.Identity.GetSubjectId() }));
            }

            var userModel = m_mapper.Map <UserModel>(user);

            var resultCreateLink = m_usersManager.CreateExternalLogin(
                userModel.Id, info.LoginProvider, info.ProviderKey
                );

            if (resultCreateLink.HasError)
            {
                return(!returnUrl.IsNullOrEmpty() ? GetRedirectReturnAction(returnUrl, resultCreateLink.Error.Code) : View("Error"));
            }

            return(Redirect(returnUrl));
        }