clerk / javascript

Official JavaScript repository for Clerk authentication
https://clerk.com
MIT License
1.18k stars 267 forks source link

`publicMetadata` does not update within the member list object, it is always empty. #1944

Open pavittarx opened 1 year ago

pavittarx commented 1 year ago

Preliminary Checks

Reproduction / Replay Link

https://replit.com/@PavittarSingh1/ClerkBackendAPI-1

Publishable key

pk_test_aGVscGluZy1qYWd1YXItODguY2xlcmsuYWNjb3VudHMuZGV2JA

Description

Steps to reproduce:

  1. Update publicMetadata for any user.
  2. Fetch Individual user data, vs all the members of the organization.

Expected behavior: the member within the organization member list should have their publicMetadata updated.

Actual behavior:

image

image

image

Environment

I tried it locally + on replit, so this is more of a problem w/ SDK. 
Let me know, if any more information is needed. 
Thanks!
pavittarx commented 1 year ago

You can quickly reproduce this by putting in your clerk secret key here, like this ... image

panteliselef commented 1 year ago

Hey @pavittarx, seems like you are expecting to read from a OrganizationMembership's publicMetadata but you are populating a User's publicMetadata

pavittarx commented 1 year ago

Yes, the api I am using lists the info about the members of the organization, which are technically users. So, this should have, publicMetadata & privateMetadata of the user. And then, if you see it has an organization key which again has organization's public and private meta data. :)

image

ryan-saffer commented 8 months ago

Any update on this issue?

I have been told by the Clerk sales team that in order to avoid purchasing the 'Enhanced B2B SaaS add-on', which gives me custom roles and permissions, I can instead build it myself by storing a users role in their public metadata.

However the following two options do not work:

  1. Use the organization API to retrieve all members of the organisation, and view their public metadata. This does not work due to this issue, and the public metadata is always empty. (I have confirmed this in both the react and node SDKs).
  2. Use the users API to retrieve all users across all organisations, which does give me access to their public metadata, however the API does not include which organisations this user is a member of. This means I need to store the information of which organisations a user is a member of as part of their public metadata, something which is prone to many edge case errors, and the entire reason I have chosen Clerk is how organisations are a first class feature!

Edit: Looking into the source code, this seems not to be an issue with the SDK but the API. I have confirmed this by using the Clerk API Reference and can see the public metadata coming through as empty.

How do I go about raising this as an issue with the core API?

aliyeysides commented 6 months ago

As a workaround, we had to pass each member's userId to getUser to get their publicMetadata.

ryan-a-git commented 1 month ago

I too am having this issue.

Attempting to retrieve a members publicMetadata is always empty. I am using the useOrganization hook to retrieve the list of members, then trying to access member.publicMetadata, and its always empty.

Example code: `const { isLoaded, memberships } = useOrganization(OrgMembersParams)

const members = memberships?.data?.filter( (member) => member.publicMetadata.someValue === true )`

In this case I was trying to filter out some users based on some data set in the public metadata. I believe the only way to do this is probably as aliyeysides says and perform an individual getUser call for each user, to get their public metadata.

If I console.log the publicMetadata its undefined. While in the clerk dashboard I can see my users have the metadata set. Mildly annoying and should definitely be fixed by now.

tencyle-nativs commented 1 month ago

Just wondering if there’s any update on this issue. It’s creating a significant bottleneck, especially with the publicMetadata showing differently in individual user data and organization member lists. Any info on a fix would be really helpful!