/// <summary> /// Finds and returns a user if any, who has the specified <paramref name="userId"/>. /// </summary> /// <param name="userId">The user ID to search for.</param> /// <returns></returns> public async virtual Task <IAnonymousUser> FindByIdAsync(string userId) { if (userId == null) { throw new ArgumentNullException(nameof(userId)); } if (!TryGetAnonymousIdCookie(out var sub)) { var anonId = await _sharedUserSession.GetAnonymousIdAsync(); if (anonId != null) { AppendAnonymousIdCookie(anonId); sub = anonId; } } if (sub == userId) { return(await _anonUserFactory.CreateAsync(sub)); } return(null); }
public async Task GetProfileDataAsync(ProfileDataRequestContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (context.Subject?.IsAnonymous() == true) { var sub = context.Subject.GetSubjectId(); if (sub == null) { throw new InvalidOperationException("No sub claim present"); } var anonUser = await _anonUserManager.FindByIdAsync(sub); if (anonUser != null) { var principal = await _anonPrincipalFactory.CreateAsync(anonUser); if (principal == null) { throw new InvalidOperationException("AnonymousClaimsFactory failed to create a principal"); } context.AddRequestedClaims(principal.Claims); } } else if (context.Subject != null) { Claim aid = null; var anonId = await _sharedUserSession.GetAnonymousIdAsync(); if (anonId != null) { aid = new Claim(JwtClaimTypes.AnonymousId, anonId); } else { var identity = context.Subject.Identities.First(); if (identity.HasClaim(x => x.Type == JwtClaimTypes.AnonymousId)) { aid = identity.FindFirst(x => x.Type == JwtClaimTypes.AnonymousId); } } if (aid != null) { if (_anonIdsrvOptions.AlwaysIncludeAnonymousIdInProfile) { context.IssuedClaims.Add(aid); } else { context.AddRequestedClaims(new[] { aid }); } } } await _inner.GetProfileDataAsync(context); }