AppsGuia

Login por um flow

O Waiso não guarda senhas dos visitantes do seu app. Um flow de login que você escreve confere o que o visitante digitou — numa tabela, numa lista, num código de convite — e responde {"user": {...}} para deixar entrar.

O que você vai aprender
  • Marcar um flow como login de um app
  • Fazer o visitante entrar pela página
  • Fazer um endpoint responder só a visitantes que entraram e receber quem eles são

Como funciona

Três peças se encontram: o app (uma página com formulário de entrada), o flow de login (suas regras de quem entra) e os endpoints que a página chama depois de entrar. A página envia o que o visitante digitou para o login do app; o Waiso roda o seu flow; quando o flow responde um user, o Waiso entrega à página uma sessão que dura o que as configurações do app dizem. Daí em diante toda chamada a leva, e endpoints em Usuários do app só aceitam chamadas que a tragam.

Endpoints PrivadoSó aparecem aqui scripts publicados pelo editor.
Configurações
Buscar endpoints…Ctrl KTodos 8Ativos 3Inativos 5Todos os tiposScriptsFlowsScraper
hello/helloMétodoPOSTModoSyncAuthBearerStatus
report/daily-reportMétodoPOSTModoAsyncAuthBearerStatus
campaign/campaignMétodoPOSTModoAsyncAuthBearerStatus
greetNão configuradoMétodo—Modo—Auth—Status
counterNão configuradoMétodo—Modo—Auth—Status
approvalNão configuradoMétodo—Modo—Auth—Status
A página de API, onde se escolhe o acesso de cada endpoint: token de API, público ou Usuários do app.

O user que o seu flow devolve tem o formato que você quiser — um id, um nome, um papel, a conta de cliente a que o visitante pertence. O que ele contém é exatamente o que cada endpoint de Usuários do app recebe, então um script pode filtrar uma tabela por user["id"] sem nunca confiar no que a página envia.

Configure

  1. Escreva o flow de login

    Um flow cuja última etapa responde {"user": {...}} para deixar entrar, ou qualquer outra coisa (uma message é mostrada) para recusar. Publique.

  2. Escolha no app

    App → Configurações → Login: escolha o flow e quanto tempo dura uma sessão (7 dias por padrão).

  3. Proteja os endpoints

    Na página de API, defina o acesso de cada endpoint privado como Usuários do app.

Pythoncheck-guest.py
def main(email: str = "", code: str = ""):
    # Decide who gets in: a table, a list, an invite code — your rules.
    guests = {"ana@exemplo.com": "1234"}
    if guests.get(email.strip().lower()) == code:
        return {"user": {"email": email, "name": email.split("@")[0]}}
    return {"message": "Wrong e-mail or code"}

Pela página

htmllogin.html
<script src="/_waiso.js"></script>
<script>
  async function signIn(email, code) {
    try {
      const user = await waiso.login({ email, code })   // runs the login flow
      show(`Hello, ${user.name}`)
    } catch (e) {
      show(e.body?.message || 'Could not sign in')
    }
  }
  // Every call now carries the session; "App users" endpoints receive `user`.
  const mine = await waiso.call('my-orders', {})
</script>

A sessão fica guardada só na aba aberta e vai num cabeçalho em cada chamada — nunca num cookie — então funciona igual numa cópia baixada. waiso.logout() encerra; Desconectar todos em Configurações encerra todas.

O que um endpoint de Usuários do app recebe

Pythonmy-orders.py
def main(user: dict):
    # Only signed-in visitors reach this; user is what the login flow returned.
    return {"orders": find_orders(user["email"])}
  • Um flow recebe user como entrada; um script quando declara um parâmetro user.
  • Sem sessão, com uma expirada, ou com uma de um app de outro projeto: recusada com 401 antes de qualquer execução.
  • Tentativas de login são freadas depois de 10 por minuto por visitante.

Em Execuções

As execuções do flow de login são suas, como qualquer execução — o que o visitante digitou fica nas entradas, então confira códigos em vez de guardar senhas de verdade nele.

Uma sessão pertence a um app e a um projeto: uma sessão de um app de outro projeto é recusada em tudo aqui, e desconectar todos de um app nunca mexe em outro. Quando um app é tirado do ar, as sessões dele param de funcionar na hora.

Mantenha a sessão curta em páginas sensíveis: uma hora basta para um formulário interno, uma semana serve para uma lista de convidados.