Authentication
The @react-query-firebase/auth package provides hooks subscribing to a users state.
Usage
The package provides hooks for subscribing to a users state.
To use the hooks, export your Auth instance, e.g:
import { initializeApp } from 'firebase/app';
import { getAuth } from 'firebase/functions';
const firebase = initializeApp({
...
});
export const auth = getAuth(firebase);
useAuthUser
The useAuthUser hook can be used to query a users authentication state using the useQuery hook.
import React from "react";
import { useAuthUser } from "@react-query-firebase/auth";
import { auth } from "../firebase";
function Profile() {
const query = useAuthUser("user", auth);
if (query.isLoading) {
return <div>Loading...</div>;
}
const user = query.data;
if (!user) {
return <div>Please sign-in!</div>;
}
return <div>Welcome {user.displayName}</div>;
}
useAuthIdToken
The useAuthIdToken hooks can be used to query the users ID Token using the useQuery hook.
The query returns an IdTokenResult if the user is authenticated.
import React from "react";
import { useAuthIdToken } from "@react-query-firebase/auth";
import { auth } from "../firebase";
function Profile() {
const query = useAuthIdToken(["user", "token"], auth);
if (query.isLoading) {
return <div>Loading...</div>;
}
if (!query.data) {
return <div>User not authenticated</div>;
}
return <div>ID Token: {query.data.token}</div>;
}
Force Refresh
To force a refresh regardless of token expiration, provide the forceRefresh option:
useAuthIdToken(["user", "token"], auth, {
forceRefresh: true,
});
UseQueryOptions
Since the hooks wrap onto the useQuery hook, we can also pass options.
For example, to be notified on success:
const query = useAuthUser("user", auth, {
onSuccess(user: User | null) {
if (user) {
console.log(user.displayName);
} else {
console.log('No user signed in.');
}
}
});
When using the useAuthIdToken hook, using the hook options also allows us to return just the
users ID Token rather than the whole result if required:
import React from "react";
import { useAuthIdToken } from "@react-query-firebase/auth";
import { auth } from "../firebase";
function Profile() {
const query = useAuthIdToken<string | null>(["user", "token"], auth, {
forceRefresh: true,
}, {
// Return the token if the result is returned.
select(result: IdTokenResult | null): string | null {
return result?.token;
}
});
if (query.isLoading) {
return <div>Loading...</div>;
}
if (!query.data) {
return <div>User not authenticated</div>;
}
return <div>ID Token: {query.data}</div>;
}