예제 #1
0
        public ActionResult ExternalLoginCallback(string returnUrl)
        {
            var loginInfo = HttpContext.GetOwinContext().Authentication.GetExternalLoginInfo();

            if (loginInfo == null)
            {
                return(RedirectToAction("Login"));
            }

            var email = loginInfo.Email;

            if (loginInfo.Login.LoginProvider.ToLower() == "twitter")
            {
                string accessToken  = loginInfo.ExternalIdentity.Claims.Where(x => x.Type == "urn:twitter:access_token").Select(x => x.Value).FirstOrDefault();
                string accessSecret = loginInfo.ExternalIdentity.Claims.Where(x => x.Type == "urn:twitter:access_secret").Select(x => x.Value).FirstOrDefault();
                var    twitterLogin = TwitterHelper.GetTwitterLogin(accessToken, accessSecret,
                                                                    ConfigurationManager.AppSettings["twitter:ConsumerKey"], ConfigurationManager.AppSettings["twitter:ConsumerSecret"]);

                email = twitterLogin.Email;
            }

            var result = _identityExternalAuthService.ExternalSignIn(email, loginInfo.Login.LoginProvider, loginInfo.Login.ProviderKey, isPersistent: true);

            switch (result)
            {
            case CustomerLoginResults.Successful:
                if (string.IsNullOrEmpty(returnUrl) || !Url.IsLocalUrl(returnUrl))
                {
                    return(RedirectToRoute("Home"));
                }
                return(Redirect(returnUrl));

            case CustomerLoginResults.MemberNotExists:
                ViewBag.ReturnUrl = returnUrl;
                return(View("ExternalLoginRegistration", new RegisterExternalModel
                {
                    Email = email,
                    LoginProvider = loginInfo.Login.LoginProvider
                }));

            case CustomerLoginResults.IsLockedOut:
                return(View("AccountLockout"));

            default:
                return(RedirectToAction("Login"));
            }
        }