コード例 #1
0
        private async Task<IdentityResult> RegisterExternalUser(ExternalLoginDetails details)
        {
            IdentityResult result;

            var user = await _userManager.FindByEmailAsync(details.Email);

            if (user == null)
            {
                user = new ApplicationUser()
                {
                    UserName = details.Email,
                    Email = details.Email,
                    EmailConfirmed = true,
                    AccessFailedCount = 0,
                };
                result = await _userManager.CreateAsync(user);
                if (!result.Succeeded)
                {
                    return result;
                }
            }
            
            result = await _userManager.AddLoginAsync(user, details.Login);
            return result;
        }
コード例 #2
0
        //private OAuth2Helper GetSuitableHelper(LocalAccessTokenRequest request)
        //{
        //    var provider = request.RedirectUri.Replace("https://votify.", string.Empty).Replace("/", string.Empty);
        //    switch(provider)
        //    {
        //        case "google":
        //       //     return GoogleHelper.Instance(request.ClientId);
        //        case "facebook":
        //         //   return FacebookHelper.Instance(request.ClientId);
        //        case "linkedin":
        //           // return LinkedinHelper.Instance(request.ClientId);
        //        default:
        //            return null;
        //    }

        //}

        //[AllowAnonymous]
        //[HttpPost]
        //[Route("ObtainLocalAccessToken")]
        //public async Task<IActionResult> ObtainLocalAccessToken(LocalAccessTokenRequest request)
        //{
        //    if (!ModelState.IsValid)
        //    {
        //        return HttpBadRequest(ModelState);
        //    }
        //    var helper = GetSuitableHelper(request);
        //    var userInfo = await helper.GetExternalLoginDetails(request.AuthorizationCode);
        //    if (userInfo == null)
        //    {
        //        ModelState.AddModelError("", "Could not connect to your account");
        //        return HttpBadRequest(ModelState);
        //    }
        //    if (string.IsNullOrEmpty(userInfo.Email))
        //    {
        //        ModelState.AddModelError("", "There was no email address connected to this account");
        //        return HttpBadRequest(ModelState);
        //    }
        //    return await BuildAccessTokenResponse(userInfo);   
        //}

        private async Task<IActionResult> BuildAccessTokenResponse(ExternalLoginDetails details)
        {
            try { 
                IdentityUser user = await _userManager.FindByLoginAsync(details.Login.LoginProvider, details.Login.ProviderKey);
                if (user == null)
                {
                    var result = await RegisterExternalUser(details);
                    if (!result.Succeeded)
                    {
                        return GenerateErrorResult(result);
                    }
                    user = await _userManager.FindByEmailAsync(user.Email);
                }

                JObject accessTokenResponse = new JObject(); // AuthHelper.GenerateLocalAccessTokenResponse(user.UserName);
                return Ok(accessTokenResponse);
            } catch (Exception ex)
            {
                ModelState.AddModelError("", "Could not connect to your account");
                return HttpBadRequest(ModelState);
            }
        }