I do have an ASP.NET Core web api with an Angular frontend and I'm trying to use Facebook Login. Currently, I can successfully login using an angular social login module that I got from angularx-social-login and it returns token and some information about the facebook account. My problem right now is I'm trying to save the facebook credentials into my user store but received an error that I can't add the new facebook user as it doesn't have any password.
public async Task<ActionResult<UserDto>> Facebook([FromBody] FacebookAuthViewModel model)
{
var userInfoResponse = await Client.GetStringAsync(
$"https://graph.facebook.com/v2.8/me?fields=id,email,first_name,last_name,name,gender,locale,birthday,picture&access_token={model.AccessToken}");
var userInfo = JsonConvert.DeserializeObject<FacebookUserData>(userInfoResponse);
var user = await _userManager.FindByEmailAsync(userInfo.Email);
if (user == null)
{
var appUser = new AppUser
{
FirstName = userInfo.FirstName,
LastName = userInfo.LastName,
FacebookId = userInfo.Id,
Email = userInfo.Email,
UserName = userInfo.Email,
PictureUrl = userInfo.Picture.Data.Url
};
await _userManager.CreateAsync(appUser,
null);
}
var localUser = await _userManager.FindByNameAsync(userInfo.Email);
if (localUser == null)
{
return BadRequest(new ApiResponse(401, "Failed to create local user account."));
}
return new UserDto
{
DisplayName = localUser.DisplayName,
Token = _tokenService.CreateToken(localUser),
Email = localUser.Email,
};
}