Início rápido
Crie um realm e um client no console e faça o login de um usuário em uma aplicação Next.js com Auth.js — em cerca de dez minutos.
Este guia leva você de uma conta vazia até uma aplicação Next.js (App Router) que faz o login de pessoas pelo login hospedado do Authio e lê no servidor quem elas são. Ele usa o Auth.js v5 e o authio-provider-nextauth, o mesmo provider com que o próprio console do Authio faz login.
Antes de começar
Configure o Authio
Crie um realm
No console, abra Realms e escolha Novo realm. Dê um nome a ele; o ID do realm derivado do nome passa a fazer parte do emissor e não pode ser trocado depois, então escolha algo estável, como
acme.A visão geral do realm mostra o emissor (issuer), o endereço para o qual todos os clients do realm apontam:
EmissorTexto simpleshttps://authio.api.hyperio.tech/realms/acmeCrie um client para a sua aplicação
Abra Clientes e escolha Novo cliente. Selecione o realm que você acabou de criar, dê ao client um ID (letras minúsculas, números e hífens, por exemplo
acme-web) e um nome de exibição — o nome que os seus usuários veem na tela de login.Em redirect URIs, adicione o endereço em que o Auth.js recebe o login:
Redirect URITexto simpleshttp://localhost:3000/api/auth/callback/authioO segredo do client aparece uma única vez, logo depois que o client é criado. Copie-o agora; se perder, gere outro pela tela do client.
Conecte a sua aplicação
Instale os pacotes
TerminalBashnpm install next-auth@beta authio-provider-nextauthAdicione as credenciais
O Auth.js lê as configurações do provider em variáveis com o prefixo
AUTH_AUTHIO_.AUTH_SECRETé outra coisa: a chave que cifra o cookie de sessão. Gere-a comnpx auth secrete nunca reaproveite o segredo do client para isso..env.local.envAUTH_SECRET=gerado-por-npx-auth-secret AUTH_AUTHIO_ISSUER=https://authio.api.hyperio.tech/realms/acme AUTH_AUTHIO_ID=acme-web AUTH_AUTHIO_SECRET=YOUR_CLIENT_SECRETConfigure o Auth.js
Registre o provider do Authio e exponha os route handlers do Auth.js. Com as variáveis acima no lugar, o provider não precisa de opções.
auth.tsTypeScriptimport NextAuth from 'next-auth' import Authio from 'authio-provider-nextauth/v5' export const { handlers, signIn, signOut, auth } = NextAuth({ providers: [Authio], })Adicione entrar e sair
Leia a sessão no servidor com
auth()e use server actions para os dois botões:app/page.tsxTypeScriptimport { auth, signIn, signOut } from '@/auth' export default async function Home() { const session = await auth() if (!session?.user) { return ( <form action={async () => { 'use server' await signIn('authio') }} > <button type="submit">Entrar</button> </form> ) } return ( <form action={async () => { 'use server' await signOut() }} > <p>Conectado como {session.user.email}</p> <button type="submit">Sair</button> </form> ) }Teste
Rode
npm run dev, abrahttp://localhost:3000e escolha Entrar. Você cai no login hospedado do realm. Entre com um usuário que você cadastrou no realm pelo console e você volta à sua aplicação com uma sessão.
Solução de problemas
| O que aparece | Por quê | O que fazer |
|---|---|---|
| O login hospedado recusa o pedido por causa do redirect URI | O endereço é comparado por inteiro com os registrados no client. | Registre exatamente http://localhost:3000/api/auth/callback/authio — esquema, host, porta e caminho. |
invalid_scope — scope precisa incluir openid | O client exige o escopo openid e o pedido não o trouxe. | Se você sobrescrever scope, escreva a lista inteira: openid profile email mais o que você acrescentar. |
UntrustedHost em produção | O Auth.js só confia no host informado em AUTH_URL (ou em AUTH_TRUST_HOST). | Defina AUTH_URL com o endereço público da sua aplicação. |
| Uma página de erro logo depois de uma pausa longa na tela de login | A verificação que o Auth.js guarda para um login expirou ou foi substituída por outra, mais nova, aberta em outra aba. | Comece o login de novo; o Authio já tem a sessão, então ele passa direto. |