public async Task <IActionResult> Google([FromBody] GoogleModel googleModel) { var appAccessToken = new AppAccessToken(); var tokenResponse = await Client.PostAsync($"https://www.googleapis.com/oauth2/v4/token?code={googleModel.Code}&client_id={_googleAuthModel.ClientId}&client_secret={_googleAuthModel.ClientSecret}&redirect_uri=http://localhost/oauth2callback&grant_type=authorization_code", null); if (tokenResponse.StatusCode != HttpStatusCode.OK) { return(new BadRequestObjectResult(new { code = "InvalidCode", description = tokenResponse.Content.ReadAsStringAsync().Result }));// "Google authorization code is not valid."}); } appAccessToken = JsonConvert.DeserializeObject <AppAccessToken>(tokenResponse.Content.ReadAsStringAsync().Result); var userResponse = await Client.GetStringAsync($"https://www.googleapis.com/oauth2/v2/userinfo?access_token={appAccessToken.AccessToken}"); var userInfo = JsonConvert.DeserializeObject <GoogleUserData>(userResponse); var existingUser = await _userManager.FindByEmailAsync(userInfo.Email); if (existingUser == null) { var user = new ApplicationUser { GoogleId = userInfo.Id, Email = userInfo.Email, UserName = userInfo.FirstName + userInfo.LastName, PictureUrl = userInfo.Picture, Visibility = true, Nationality = "US" }; if (userInfo.Gender != null) { user.Gender = userInfo.Gender.Equals("male") ? Gender.Male : userInfo.Gender.Equals("female") ? Gender.Female : Gender.Other; } else { user.Gender = Gender.None; } user.UserName = UserExtensions.RemoveDiacritics(user.UserName); var result = await _userManager.CreateAsync(user, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8)); if (!result.Succeeded) { return(new BadRequestObjectResult(result.Errors)); } else { existingUser = await _userManager.FindByNameAsync(user.UserName); } } var jwt = await Tokens.GenerateJwt(_jwtFactory.GenerateClaimsIdentity(existingUser.UserName, existingUser.Id), _jwtFactory, existingUser.UserName, _jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented }, existingUser.ProfileComplete); return(new OkObjectResult(jwt)); }
public async Task <IActionResult> Facebook([FromBody] FacebookModel model) { var userInfo = new FacebookUserData(); try { var userInfoResponse = await Client.GetStringAsync($"https://graph.facebook.com/v3.0/me?fields=id,email,first_name,last_name,gender,locale,birthday,picture&access_token={model.AccessToken}"); userInfo = JsonConvert.DeserializeObject <FacebookUserData>(userInfoResponse); } catch (Exception ex) { return(new BadRequestObjectResult(new List <ErrorViewModel>() { new ErrorViewModel() { Code = "InvalidToken", Description = "Facebook token is not valid." } })); } if (userInfo.Picture != null) { try { var imageResponse = await Client.GetStringAsync($"https://graph.facebook.com/v3.0/{userInfo.Id}/picture?type=album&redirect=false"); var image = JsonConvert.DeserializeObject <FacebookPictureData>(imageResponse); userInfo.Picture = image; } catch (Exception ex) { Console.WriteLine(ex); } } var existingUser = await _userManager.FindByEmailAsync(userInfo.Email); if (existingUser == null) { var user = new ApplicationUser { FacebookId = userInfo.Id, Email = userInfo.Email, UserName = userInfo.FirstName + userInfo.LastName, PictureUrl = userInfo.Picture?.Data?.Url, Visibility = true, Nationality = "US" }; if (userInfo.Gender != null) { user.Gender = userInfo.Gender.Equals("male") ? Gender.Male : userInfo.Gender.Equals("female") ? Gender.Female : Gender.Other; } else { user.Gender = Gender.None; } if (userInfo.Birthday != DateTime.MinValue) { var dateOfBirth = new DateTime(day: userInfo.Birthday.Day, month: userInfo.Birthday.Month, year: DateTime.Now.Year); if (DateTime.Now >= dateOfBirth) { user.Age = DateTime.Now.Year - userInfo.Birthday.Year; } else { user.Age = DateTime.Now.Year - userInfo.Birthday.Year - 1; } } user.UserName = UserExtensions.RemoveDiacritics(user.UserName); var result = await _userManager.CreateAsync(user, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8)); if (!result.Succeeded) { return(new BadRequestObjectResult(result.Errors)); } else { existingUser = await _userManager.FindByNameAsync(user.UserName); } } var jwt = await Tokens.GenerateJwt(_jwtFactory.GenerateClaimsIdentity(existingUser.UserName, existingUser.Id), _jwtFactory, existingUser.UserName, _jwtOptions, new JsonSerializerSettings { Formatting = Formatting.Indented }, existingUser.ProfileComplete); return(new OkObjectResult(jwt)); }