Exemplo n.º 1
0
        public async Task <ActionResult> ExternalLoginCallback(string returnUrl)
        {
            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();

            if (loginInfo == null)
            {
                return(RedirectToAction("Login"));
            }
            Magicodes.Web.Interfaces.GlobalApplicationObject.Current.ApplicationContext.ApplicationLog.Log(LoggerLevels.Debug, "DefaultUserName:"******"\tEmail:" + loginInfo.Email + "\tProviderKey:" + loginInfo.Login.ProviderKey + "\tExternalIdentity.Name:" + loginInfo.ExternalIdentity.Name + "\tExternalIdentity.Label:" + loginInfo.ExternalIdentity.Label + "\tExternalIdentity.Count:" + loginInfo.ExternalIdentity.Claims.Count());
            // 如果用户已具有登录名,则使用此外部登录提供程序将该用户登录
            var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent : false);

            switch (result)
            {
            case SignInStatus.Success:
                return(RedirectToLocal(returnUrl));

            case SignInStatus.LockedOut:
                return(View("Lockout"));

            case SignInStatus.RequiresVerification:
                return(RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false }));

            case SignInStatus.Failure:
            default:
                // 如果用户没有帐户,则提示该用户创建帐户
                ViewBag.ReturnUrl     = returnUrl;
                ViewBag.LoginProvider =
                    loginInfo.Login.LoginProvider == "QQConnect" ? "QQ账号" : loginInfo.Login.LoginProvider;
                return(View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel {
                    Email = loginInfo.Email, UserNickName = loginInfo.DefaultUserName
                }));
            }
        }
Exemplo n.º 2
0
        public async Task <ActionResult> ExternalLoginCallback(string returnUrl)
        {
            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();

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

            // Sign in the user with this external login provider if the user already has a login
            var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent : false);

            switch (result)
            {
            case SignInStatus.Success:
                return(RedirectToLocal(returnUrl));

            case SignInStatus.LockedOut:
                return(View("Lockout", loginInfo));

            case SignInStatus.RequiresVerification:
                return(RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false }));

            case SignInStatus.Failure:
            default:
                // If the user does not have an account, then prompt the user to create an account
                ViewBag.ReturnUrl     = returnUrl;
                ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
                return(View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel {
                    Email = loginInfo.Email
                }));
            }
        }
Exemplo n.º 3
0
        public async Task <ActionResult> ExternalLoginCallback(string reason, string returnUrl)
        {
            var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();

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

            // --- At this point the user is successfully logged in.

            // --- Sign in the user with this external login provider if the user already has a login
            var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent : false);

            switch (result)
            {
            case SignInStatus.Success:
                if (reason == "signup")
                {
                    // TODO: A user tried to sign up, but its account is already created.
                }

                var subscSrv = ServiceManager.GetService <ISubscriptionService>();
                var token    = await subscSrv.GetUserTokenByProviderDataAsync(loginInfo.Login.LoginProvider,
                                                                              loginInfo.Login.ProviderKey);

                CreateAuthenticationTicket(false, token.UserId, token.UserName,
                                           token.IsServiceUser, token.SubscriptionId, token.IsSubscriptionOwner);
                return(RedirectToLocal(returnUrl));

            case SignInStatus.LockedOut:
                return(View("Lockout"));

            default:
                // --- The user has no account and subscription yet
                if (reason == "signup")
                {
                    return(View("SignUpWithExternalLogin",
                                new SignUpWithExternalLoginViewModel
                    {
                        Provider = loginInfo.Login.LoginProvider,
                        Email = loginInfo.Email,
                        UserName = loginInfo.ExternalIdentity.Name
                    }));
                }
                if (reason == "login")
                {
                    return(View("LoginWithNoSubscriptionView",
                                new SignUpWithExternalLoginViewModel
                    {
                        Provider = loginInfo.Login.LoginProvider,
                        Email = loginInfo.Email,
                        UserName = loginInfo.ExternalIdentity.Name
                    }));
                }
                return(RedirectToLocal(returnUrl));
            }
        }
Exemplo n.º 4
0
 public async Task <SignInStatus> SignInExternalyAsync(ExternalLoginInfo loginInfo, bool isPersistence)
 {
     try
     {
         return(await AppSignInManager.ExternalSignInAsync(loginInfo, isPersistence));
     }
     catch (Exception)
     {
         return(SignInStatus.Failure);
     }
 }
Exemplo n.º 5
0
 public async Task <SignInStatus> ExternalSignInAsync(ExternalLoginInfo loginInfo)
 {
     return(await _signInManager.ExternalSignInAsync(loginInfo, isPersistent : false));
 }