Fetch jwt token from hasura-auth with refresh_token
This commit is contained in:
32
front/src/hooks/auth/useRefreshToken.tsx
Normal file
32
front/src/hooks/auth/useRefreshToken.tsx
Normal file
@ -0,0 +1,32 @@
|
||||
import { gql, useQuery } from '@apollo/client';
|
||||
import { useEffect } from 'react';
|
||||
import { authClient } from '../../apollo';
|
||||
|
||||
export const GET_TOKEN = gql`
|
||||
fragment Payload on REST {
|
||||
refreshToken: String
|
||||
}
|
||||
query jwt($input: Payload) {
|
||||
token(input: $input) @rest(type: "string", path: "/token", method: "POST") {
|
||||
accessToken
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const useRefreshToken = () => {
|
||||
const refreshToken = localStorage.getItem('refreshToken');
|
||||
const { data, loading } = useQuery(GET_TOKEN, {
|
||||
client: authClient,
|
||||
variables: { input: { refreshToken } },
|
||||
});
|
||||
useEffect(() => {
|
||||
if (!loading) {
|
||||
const accessToken = data.token.accessToken;
|
||||
if (refreshToken && accessToken) {
|
||||
localStorage.setItem('accessToken', accessToken || '');
|
||||
}
|
||||
}
|
||||
}, [data, refreshToken, loading]);
|
||||
|
||||
return { loading };
|
||||
};
|
||||
Reference in New Issue
Block a user