aws-rum-web icon indicating copy to clipboard operation
aws-rum-web copied to clipboard

feat: Support setting userId and sessionId manually

Open crowecawcaw opened this issue 2 years ago • 5 comments

I am working on adding CloudWatch RUM to a web app. Our users will authenticate with AWS Identity Center (IDC) which assigns each user a UUID already. I'd like to use that same UUID as the userId RUM instead of letting RUM generate a new UUID for me. Having consistent userIds will make it easier to connect RUM data with our backend events. We could pass in the IDC user ID as event metadata but it makes sifting through data more confusing and error prone.

Passing in user and session IDs could look like:

const config: AwsRumConfig = {
  userId: 'bd33b2a2-4b14-4ea6-aaeb-ee85c2062f5d',
  sessionId: '40af9b9a-6fa2-45f8-a437-67d2566380d9'
};

crowecawcaw avatar Feb 07 '23 16:02 crowecawcaw

Hi @crowecawcaw thanks for this; I like your proposal. Would you ever dynamically change the sessionId, or would it be sufficient to set the session Id only on initializing AwsRum?

qhanam avatar Feb 27 '23 17:02 qhanam

For our specific use case, we would only want to set the sessionId at initialization time.

crowecawcaw avatar Feb 28 '23 02:02 crowecawcaw

For a different use case, we need to dynamically set both sessionId and userId:

We'd like to use RUM for a kiosk use case. In the idle state, no user is logged in. Users can authenticate, take some set of actions, and then log out. The page is never reloaded except after a deployment.

We'd like to have the RUM client initialized the entire time, capturing any errors, events, timings, etc. even when logged out (without associating those with the session/user before or after). We'd also like to set the userId and a new sessionId programmatically every time a user logs in (and reset them when they log out).

We'd like to avoid having to manage multiple instances of the RUM client and possibly lose events or get some other bad behavior because we didn't realize we had to call flush() and disable() (we haven't tested this route yet though, so might not even be correct - just trying to point out there's some danger in using multiple instances since most of the docs assume you'd only create one instance of the client) to destruct the previous instance before creating a new one to avoid duplicate or lost events.

jffrenc avatar Oct 03 '23 13:10 jffrenc

@jffrenc From our point of view: the session in AWS RUM is one user session, which may contain that the user is logged in via various users during that session. The session lifecycle might be:

  • logged out
  • logged into userId: A
  • logged out
  • logged into userId: B

Then we would like to catch errors in this lifecycle and put them in relation to each other. We use the metadata feature when adding our custom user identities, and like the fact that we can abstract away in such a matter ^

jakob-lj avatar Oct 18 '23 12:10 jakob-lj

To summarize, we need the following to close out:

  • [ ] Statically set user id at initialization time
  • [ ] Statically set session id at initialization time

In addition, I have also received feedback for

  • [ ] Dynamically set user id at runtime
  • [ ] Dynamically set session id at runtime
  • [ ] Dynamically start, stop, and get current session at runtime

williazz avatar Mar 05 '24 19:03 williazz