Пример #1
0
        public async Task <IActionResult> ExternalLoginCallback(string returnUrl = null)
        {
            var info = await this.GetExternalLoginInfoAsync();

            if (info == null)
            {
                return(await this.ShowExternalSignInErrorAsync(OAuthSignInError.InvalidRequest));
            }
            if (info.ProviderDisplayName.IsNullOrWhiteSpace()) //微软BUG?没有带出 DisplayName
            {
                var schemas = await this.SignInManager.GetExternalAuthenticationSchemesAsync();

                var p = schemas.FirstOrDefault(s => s.Name.CaseInsensitiveEquals(info.LoginProvider));
                info.ProviderDisplayName = p?.DisplayName;
            }
            Microsoft.AspNetCore.Identity.SignInResult result = await ExternalLoginSignInAsync(info);

            if (result.Succeeded)
            {
                return(this.RedirectToLocal(returnUrl));
            }
            if (result.IsLockedOut)
            {
                return(await this.ShowExternalSignInErrorAsync(OAuthSignInError.UserLockedOut));
            }
            else if (result.IsNotAllowed)
            {
                return(await this.ShowExternalSignInErrorAsync(OAuthSignInError.NotAllowed));
            }
            else
            {
                var loginModel =
                    new OAuthSignedInModel
                {
                    LoginProvider       = info.LoginProvider,
                    ProviderDisplayName = info.ProviderDisplayName,
                    ProviderKey         = info.ProviderKey,
                    ThirdPartUserName   = info.Principal.FindFirst(ClaimTypes.Name)?.Value
                };
                await this.SignInManager.SignOutAsync();

                return(await this.ShowBindExternalAccountAsync(loginModel));
            }
        }
Пример #2
0
 /// <summary>
 /// 表示返回对第三方账号进行绑定的错操的结果。
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 protected abstract Task <IActionResult> ShowBindExternalAccountAsync(OAuthSignedInModel model);