private async Task <IdentityResult> InitUserAsync(IdentityUser user, ExternalLoginInfo externalInfo) { var email = externalInfo.Principal.Identity.Name; await _userStore.SetUserNameAsync(user, email, CancellationToken.None); await _emailStore.SetEmailAsync(user, email, CancellationToken.None); var result = await _userManager.CreateAsync(user); var role = externalInfo.GetUserRole(); if (role != null) { await _userManager.AddToRoleAsync(user, role); } return(result); }
private async Task UpdateUserRoleAsync(IdentityUser externalUser, ExternalLoginInfo externalInfo) { var roles = await _userManager.GetRolesAsync(externalUser); if (roles.Count > 1) { throw new InvalidOperationException("Application support only single role assigned per user."); } var currentRole = roles.SingleOrDefault(); var externalRole = externalInfo.GetUserRole(); var isRoleChanged = currentRole != externalRole; if (isRoleChanged && currentRole != null) { await _userManager.RemoveFromRoleAsync(externalUser, currentRole); } if (isRoleChanged && externalRole != null) { await _userManager.AddToRoleAsync(externalUser, externalRole); } }