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>;
}