Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delete all users from the new firebase auth emulator

I'm playing around with the new firebase auth emulator (on the node admin SDK), and have made some tests that run perfectly if I manually delete the created users between each test, but I can't seem to automatically delete them?

I've used the endpoint defined here in my beforeEach(), but I get an "Response code 401, unauthorized" back from the response call?

Endpoint: delete: http://localhost:9099/emulator/v1/projects/{project-id}/accounts

I just tried using Postman to send the call, and it responded with the following:

{
    "error": {
        "code": 401,
        "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
        "errors": [
            {
                "message": "Login Required.",
                "domain": "global",
                "reason": "required",
                "location": "Authorization",
                "locationType": "header"
            }
        ],
        "status": "UNAUTHENTICATED"
    }
}

The URL in the error didn't seem to give me much help beyond adding a google button to a web app, which pointed me to creating an OAuth2 web account. I entered the localhost:9099 into my existing one, but don't know where I should use the client ID and the client secret? If they are what I should use at all.

I know I need some sort of Authorization header for the delete call, but I just don't get what I should put in that header, or how.

Thank you for any insight into this.

Edit: I've now tried the following Authorization headers:

"admin"

"" (an empty string)

The full token generated by firebase.options.credential.getAccessToken()

The access_token field of the above token

The id_token field of the above token.

The token itself looks like this (redacted some fields):

{ 
"access_token":
       "[access token string here]",
    "expires_in": 3599,
    "scope":
       "openid https://www.googleapis.com/auth/firebase https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloudplatformprojects.readonly",
    "token_type": "Bearer",
    "id_token":
       "[id token string here]"
}
like image 627
XBullet123 Avatar asked Nov 15 '20 14:11

XBullet123


People also ask

Where are Firebase Auth users stored?

The user data for firebase authentication is stored in firebaseLocalStorageDb in IndexedDB .

What does Firebase auth () CurrentUser return?

You can also get the currently signed-in user by calling CurrentUser . If a user isn't signed in, CurrentUser returns null. Note: CurrentUser might also return null because the auth object has not finished initializing.


2 Answers

Thanks! However, I wanted using this with a curl format to get this on a npm script, so here is what I used:

curl -H 'Authorization: Bearer owner' -X DELETE http://localhost:9099/emulator/v1/projects/<projectid>/accounts

the response should be:

{}
like image 71
Stéphane Changarnier Avatar answered Oct 22 '22 10:10

Stéphane Changarnier


I figured it out! When the admin generates a token, I use the access_token field part of this token and add the header Authorization: 'Bearer' + access_token to the delete request. Thanks for the help.

(This is an emulator-only endpoint)

Edit: I could just use the string "owner" as the token... Took me a while to get that, but now it works.

like image 34
XBullet123 Avatar answered Oct 22 '22 11:10

XBullet123