How can I construct a user from a user json?

Viewed 41

I am using the CDN import method for SDK v9. I would like to know, given that I have a JSON-serializable representation of a user object, how can I construct a user object, so that I can use it with methods like updateCurrentUser.

If there was a way that I could access the UserImpl class like you can with npm

import { UserImpl } from '@firebase/auth/internal';

I'd be able to do this. However, I am stuck with the CDN import method, which doesn't allow access to the UserImpl class.

I understand that this may be a strange question, but understand that the way this is set up, once the user logs in, its json representation is saved elsewhere and the user object itself is lost.

I guess a better question would be, how can I deserialize a user?

An important piece of information here is that I want to be able able to deserialize users that once logged in. At some point of the app's lifetime, a user logs in(multiple users might log in and out), the user object is lost, and its json representation is saved elsewhere. I need to be able to retrieve the user object from its json representation later.

A potential workaround that seems to work at first glance, is to save a few informations from the first user that ever logs in:

const userInfo = {}
Object.setPrototypeOf(userInfo.stsTokenManager, auth.currentUser.stsTokenManager.constructor.prototype)
userInfo._clone = auth.currentUser._clone;
userInfo.auth = auth.currentUser.auth;

//and then I apply this to any user json I need to later on

user._clone = userInfo._clone;
user.auth = userInfo.auth;
user.stsTokenManager = userInfo.stsTokenManager;

//if I add the _clone,auth and stsTokenManager,I don't get errors andthe
//user json seems to become a user object for all intents and purposes, 
//however I don't know if this is very safe and works in all situations.
//would applying the same clone,auth and tokenManager to all json users 
//work?

Unfortunately, using the firebase admin sdk is also not an option because this is a client side app.

Is there any better solution? Thank you for your time.

0 Answers
Related