Auth
Vite SPA
Integração ponta-a-ponta com Vite + React Router (qualquer roteador serve).
Caminho default do pacote. Funciona com react-router, tanstack-router, wouter ou qualquer roteador client-side.
1. Variáveis de ambiente
.env:
VITE_OIDC_AUTHORITY=https://auth.uranus.com.br/realms/uranus
VITE_OIDC_CLIENT_ID=omnifisco-web2. Provider
src/main.tsx:
import { AuthProvider } from '@uranus-workspace/auth';
import { RouterProvider } from 'react-router';
import { router } from './router';
const config = {
authority: import.meta.env.VITE_OIDC_AUTHORITY,
clientId: import.meta.env.VITE_OIDC_CLIENT_ID,
redirectUri: `${window.location.origin}/callback`,
silentRedirectUri: `${window.location.origin}/silent-renew.html`,
postLogoutRedirectUri: window.location.origin,
};
createRoot(document.getElementById('root')!).render(
<AuthProvider config={config}>
<RouterProvider router={router} />
</AuthProvider>,
);3. Rotas /login e /callback
import { AuthCallback } from '@uranus-workspace/auth';
import { OidcSignInScreen } from '@uranus-workspace/auth/screens';
import { useNavigate } from 'react-router';
export const router = createBrowserRouter([
{
path: '/login',
element: (
<OidcSignInScreen
providers={['google']}
idpHints={{ google: 'google' }}
credentials="hidden"
/>
),
},
{
path: '/callback',
element: <AuthCallbackPage />,
},
{
path: '/',
element: (
<RequireAuth>
<Dashboard />
</RequireAuth>
),
},
]);
function AuthCallbackPage() {
const navigate = useNavigate();
return (
<AuthCallback
onSuccess={(to) => navigate(to ?? '/', { replace: true })}
errorFallback={(error) => <pre>{error.message}</pre>}
/>
);
}4. Silent renew
Copie node_modules/@uranus-workspace/auth/templates/silent-renew.html para public/silent-renew.html. O Vite serve public/ na raiz, então o iframe do oidc-client-ts encontra a página em ${origin}/silent-renew.html.
Alternativa SPA-only: use o componente React <SilentRenewCallback /> em uma rota dedicada e aponte silentRedirectUri para ela.
5. Cliente HTTP
import { useAccessToken } from '@uranus-workspace/auth';
import { createAuthorizedFetch } from '@uranus-workspace/auth/api';
export function useApi() {
const getToken = useAccessToken();
return useMemo(() => createAuthorizedFetch(getToken), [getToken]);
}Teste rápido
pnpm devno app.- Abra
/logine clique em Continuar com Google. - Após o consent, o IdP redireciona para
/callback?code=.... <AuthCallback>chamasigninRedirectCallback, recuperareturnTodo sessionStorage e navega para/.