Multi-conta
Manter várias contas autenticadas num dispositivo e alternar entre elas.
Alguns produtos precisam que um navegador segure mais de uma identidade ao mesmo tempo — alguém de agência com uma conta pessoal e uma de trabalho, uma pessoa de suporte com uma conta de teste ao lado da própria. O client de navegador consegue guardar todas e alternar entre elas sem sair e entrar de novo.
Só no navegador, e desligado por padrão. Ligue na criação do client:
createClient(url, key, { multiUser: true });Com ele desligado, os métodos desta página continuam existindo, mas nada é salvo no armazenamento de contas.
Existem dois armazenamentos, e a distinção explica todo o resto:
a sessãoativaUma por vez. É o que toda chamada usa, guardada em nlv-<slug>-token.
o armazenamento de contasváriasTudo para onde você pode alternar, guardado em nlv-<slug>-token-accounts.
Indexado por id de usuário — o user.id da resposta, ou a claim sub do
access token.
add
add(auth) → void
Registra uma conta no armazenamento sem torná-la ativa.
const { data } = await nulvless.auth.signIn(params);
await nulvless.auth.add(data);Você raramente precisa dele. Com multiUser ligado, uma entrada, um cadastro ou
uma verificação de challenge bem-sucedida salva a conta automaticamente, e
toda renovação de token a atualiza — o add serve para o caso em
que você tem um Authenticated vindo de outro lugar e quer colocá-lo na lista.
switch
switch(userId) → boolean
Torna uma conta salva a sessão ativa.
const ok = await nulvless.auth.switch('usr_4c81f0a2');
if (!ok) return; // não está no armazenamentouserIdstringRequiredVindo do list().
Devolve false em vez de lançar quando a conta não está lá, então um id
desatualizado na sua interface vira um no-op em vez de um crash. Em caso de
sucesso, emite account-switched.
Alternar não reautentica. Se o token guardado daquela conta expirou e não
consegue renovar, a próxima chamada levanta unauthorized — trate esse evento
removendo a entrada com remove, ou a pessoa vai ver uma conta quebrada no
seletor para sempre.
deselect
deselect() → void
Larga a sessão ativa sem encerrá-la no servidor.
await nulvless.auth.deselect();A conta continua no armazenamento, então o switch traz de volta na
hora. É o que chamar quando o usuário sai da área autenticada para escolher ou
adicionar outra conta: sem sessão ativa, a renovação automática não tem o que
renovar e se cala, em vez de manter quente uma sessão que nenhuma tela usa.
Não é um sign out. A sessão continua viva no servidor e nos outros dispositivos do usuário, e nada é revogado.
A entrada da conta é escrita a partir da sessão como ela está antes de ser largada, então voltar pelo switch nunca restaura um refresh token mais antigo do que o que aquela sessão já gastou.
list
list() → AccountEntry[]
Tudo que está no armazenamento no momento.
const accounts = await nulvless.auth.list();
// [{ userId, access_token, expires_in }]O expires_in é o tempo restante em segundos e pode ser negativo para uma
entrada cujo token já venceu — útil para deixar uma opção apagada antes de a
pessoa escolher.
remove
remove(userId) → void
Tira uma conta do armazenamento.
await nulvless.auth.remove(userId);Não mexe na sessão ativa, e não desautentica ninguém no servidor. Ele
esquece um token localmente, que é o comportamento certo para "remover deste
dispositivo" e o errado para "sair" — para isso,
signOut.
get e set
get() → Authenticated | null · set(data) → void
A sessão ativa, lida e escrita diretamente.
const active = await nulvless.auth.get();O get devolve o que está guardado, com expires_in recalculado como segundos
restantes — negativo quando o token já expirou. Ele lê o armazenamento e não faz
requisição, então responde "tem alguém autenticado" instantaneamente, enquanto o
getSession pergunta ao servidor pelo registro
oficial.
O set substitui a sessão ativa. Recorra a ele só para restaurar uma sessão que
você mesmo persistiu; os fluxos comuns guardam por você.