public async Task <IResponse> FacebookSignIn([FromBody] FacebookLoginModel facebookLoginModel)
        {
            ExternalLoginResponse externalLoginResponse = new ExternalLoginResponse();

            externalLoginResponse.IsModelValid = ModelState.IsValid;
            if (ModelState.IsValid)
            {
                FacebookDataModel facebookData = await FacebookAPI.GetUserLoginData(facebookLoginModel.AccessToken);

                ExternalLoginInfo info = CustomExternalLoginInfo.FromLoginModel("Facebook", facebookData);

                var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, true);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User logged in");
                }
                externalLoginResponse.IsRegistered = result.Succeeded;
                externalLoginResponse.Result       = result;
            }
            else
            {
                externalLoginResponse.Errors = ModelState.Values.SelectMany(v => v.Errors.Select(b => b.ErrorMessage));
            }
            return(externalLoginResponse);
        }
Example #2
0
        public static async Task <FacebookDataModel> GetUserLoginData(string accessToken)
        {
            FacebookDataModel facebookLoginModel = new FacebookDataModel();
            var response = await _httpClient.GetAsync($"me?access_token={accessToken}&fields=id,name,email,first_name,last_name");

            if (response.IsSuccessStatusCode)
            {
                var result = await response.Content.ReadAsStringAsync();

                facebookLoginModel = JsonConvert.DeserializeObject <FacebookDataModel>(result);
            }
            return(facebookLoginModel);
        }
        public async Task <IResponse> FacebookRegister([FromBody] FacebookRegisterModel facebookRegisterModel)
        {
            ExternalLoginResponse externalLoginResponse = new ExternalLoginResponse();

            externalLoginResponse.IsModelValid = ModelState.IsValid;
            if (ModelState.IsValid)
            {
                FacebookDataModel facebookData = await FacebookAPI.GetUserLoginData(facebookRegisterModel.AccessToken);

                ExternalLoginInfo info    = CustomExternalLoginInfo.FromLoginModel("Facebook", facebookData);
                Account           account = new Account {
                    UserName = facebookRegisterModel.Username, Email = facebookData.Email
                };

                var result = await _userManager.CreateAsync(account);

                if (result.Succeeded)
                {
                    result = await _userManager.AddLoginAsync(account, info);

                    account.SetUpPoints(_context);
                    if (result.Succeeded)
                    {
                        await _signInManager.SignInAsync(account, true);
                    }
                }
                externalLoginResponse.CreateResult = result;
                externalLoginResponse.Errors       = result.Errors.Select(x => x.Description);
            }
            else
            {
                externalLoginResponse.Errors = ModelState.Values.SelectMany(v => v.Errors.Select(b => b.ErrorMessage));
            }

            return(externalLoginResponse);
        }