Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
            }
        }