Pular para o conteúdo

Login com OAuth

Com OAuth, o usuário entra com a conta de outro serviço. O Owbase faz a troca com o provedor e devolve o navegador ao seu app já com a sessão aberta.

  1. No site do provedor (Google, GitHub…), crie um app OAuth.
  2. No console, em Autenticação → Métodos de login → Provedores OAuth, abra o provedor, ligue-o e informe o ID e o segredo do app.
  3. Copie a URL de retorno que o console mostra e cadastre-a no app do provedor.
  4. Confirme que o domínio das páginas de sucesso e de falha está em Plataformas.
oauth.ts
import { Account, OAuthProvider } from '@owbase/web';
import { client } from './client';
const account = new Account(client);
// Leva o navegador ao provedor e volta para uma destas páginas (o hostname delas precisa estar em Plataformas).
account.createOAuth2Session({
provider: OAuthProvider.Google,
success: 'https://app.exemplo.com/entrou',
failure: 'https://app.exemplo.com/falhou',
});

createOAuth2Session não devolve nada: ele leva o navegador ao provedor. Na volta, a página success já tem a sessão, e account.get() traz o usuário. Se o usuário desistir ou o provedor recusar, o navegador vai para failure.

Em vez da sessão pronta, createOAuth2Token devolve o navegador ao seu app com userId e secret no endereço. A página de retorno troca os dois por uma sessão com createSession, aberta pelo próprio SDK no seu app, sem depender de cookie de terceiros.

Quando o app está em outro domínio, o SDK guarda a sessão no localStorage do navegador (e avisa isso no console). Isso a deixa exposta a scripts maliciosos na página (XSS): não carregue scripts de origem não confiável.

oauth-token.ts
import { Account, OAuthProvider } from '@owbase/web';
import { client } from './client';
const account = new Account(client);
// 1. Na tela de login: leva o navegador ao provedor e volta para a página de sucesso com ?userId=…&secret=…
account.createOAuth2Token({
provider: OAuthProvider.Google,
success: 'https://app.exemplo.com/entrou',
failure: 'https://app.exemplo.com/falhou',
});
// 2. Na página /entrou: troca o segredo por uma sessão, aberta pelo seu app.
// Com o app em outro domínio, o SDK guarda a sessão no localStorage: evite scripts não confiáveis na página.
const params = new URLSearchParams(window.location.search);
await account.createSession({ userId: params.get('userId') ?? '', secret: params.get('secret') ?? '' });
console.log((await account.get()).email);

Os valores aceitos em provider estão no enum OAuthProvider (por exemplo, OAuthProvider.Google, OAuthProvider.Github, OAuthProvider.Apple).

Uma conta pode ter várias identidades (e-mail e senha, Google, GitHub). account.listIdentities() mostra as do usuário logado, e account.deleteIdentity({ identityId }) desliga uma delas.