//
        // GET: /Manage/LinkLoginCallback
        public async Task <ActionResult> LinkLoginCallback()
        {
            var loginInfo = await _userManager.GetExternalLoginInfoAsync(XsrfKey, UserId.ToString());

            if (loginInfo == null)
            {
                return(RedirectToAction("ManageLogins", new { Message = ManageMessageId.Error }));
            }
            var result = await _userManager.AddLoginAsync(UserId, loginInfo.Login);

            return(result.Succeeded ? RedirectToAction("ManageLogins") : RedirectToAction("ManageLogins", new { Message = ManageMessageId.Error }));
        }
        //
        // GET: /Manage/LinkLoginCallback
        public async Task <ActionResult> LinkLoginCallback()
        {
            var loginInfo = await _authenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId()).ConfigureAwait(false);

            if (loginInfo == null)
            {
                return(RedirectToAction("ManageLogins", new { Message = ManageMessageId.Error }));
            }
            var result = await _userManager.AddLoginAsync(_userManager.GetCurrentUserId(), loginInfo.Login).ConfigureAwait(false);

            return(result.Succeeded ? RedirectToAction("ManageLogins") : RedirectToAction("ManageLogins", new { Message = ManageMessageId.Error }));
        }
예제 #3
0
        public async Task <string> ExternalLoginAsync(ExternalLoginInfo info)
        {
            if (info == null)
            {
                return($"در عملیات ورود به سایت از طریق حساب {info.ProviderDisplayName} خطایی رخ داده است. ");
            }

            var UserEmail = info.Principal.FindFirstValue(ClaimTypes.Email);
            var user      = await _userManager.FindByEmailAsync(UserEmail);

            if (user == null)
            {
                return("شما عضو سایت نیستید برای ورود به سایت ابتدا باید عضو سایت شوید.");
            }

            else
            {
                var Result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, false);

                if (Result.Succeeded)
                {
                    return("success");
                }

                else if (Result.IsLockedOut)
                {
                    return("حساب کاربری شما به مدت 20 دقیقه به دلیل تلاش های ناموفق قفل شد.");
                }

                else if (Result.RequiresTwoFactor)
                {
                    return("requiresTwoFactor");
                }

                else
                {
                    var ExternalResult = await _userManager.AddLoginAsync(user, info);

                    if (ExternalResult.Succeeded)
                    {
                        await _signInManager.SignInAsync(user, false);

                        return("success");
                    }

                    else
                    {
                        return($"در عملیات ورود به سایت از طریق حساب {info.ProviderDisplayName} خطایی رخ داده است. ");
                    }
                }
            }
        }
예제 #4
0
        public async Task <IActionResult> GetCallBackAsync()
        {
            var info = await _signInManager.GetExternalLoginInfoAsync();

            if (info == null)
            {
                ModelState.AddModelError(string.Empty, $"در عملیات ورود به سایت از طریق حساب {info.ProviderDisplayName} خطایی رخ داده است. ");
            }

            var UserEmail = info.Principal.FindFirstValue(ClaimTypes.Email);
            var user      = await _userManager.FindByEmailAsync(UserEmail);

            if (user == null)
            {
                ModelState.AddModelError(string.Empty, "شما عضو سایت نیستید برای ورود به سایت ابتدا باید عضو سایت شوید.");
            }

            else
            {
                var Result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, false);

                if (Result.Succeeded)
                {
                    return(RedirectToAction("Index", "Home"));
                }

                else if (Result.IsLockedOut)
                {
                    ModelState.AddModelError(string.Empty, "حساب کاربری شما به مدت 20 دقیقه به دلیل تلاش های ناموفق قفل شد.");
                }

                else if (Result.RequiresTwoFactor)
                {
                    return(RedirectToAction("SendCode"));
                }

                else
                {
                    var ExternalResult = await _userManager.AddLoginAsync(user, info);

                    if (ExternalResult.Succeeded)
                    {
                        await _signInManager.SignInAsync(user, false);

                        return(RedirectToAction("Index", "Home"));
                    }
                }
            }

            return(View("SignIn"));
        }
예제 #5
0
        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));
        }
        private async Task <ApplicationUser> CreateUser(FacebookUserCredentialsResponse facebookResponse)
        {
            ApplicationUser user = new ApplicationUser {
                UserName = facebookResponse.email, Email = facebookResponse.email
            };
            IdentityResult result = await applicationUserManager.CreateAsync(user);

            if (result.Succeeded)
            {
                IdentityResult loginInfoResult = await applicationUserManager.AddLoginAsync(user, new UserLoginInfo("Facebook", facebookResponse.id, facebookResponse.name));

                if (!loginInfoResult.Succeeded)
                {
                    throw new Exception("Creating new user failed");
                }
            }
            else
            {
                throw new Exception("Creating new user failed");
            }

            return(user);
        }