sequenceDiagram
    Frontend->>+Supabase: POST yourdomain.supabase.co/auth/v1/otp
    Email->>+Supabase: Click on redirect link
    Supabase-->>-Frontend: Redirect to frontend
    Frontend->>+Supabase: GET yourdomain.supabase.co/auth/v1/user
    Supabase-->>-Frontend: 200 Return session
    Frontend->>+Api: Send session user to api
    Api->>+Supabase: GET yourdomain.supabase.co/atuh/v1/user
    Supabase-->>-Api: 200 Return session
    Api->>Api: Create user on database
    Api-->>-Frontend: 200 Return user created

Como funciona:

  1. Usuário preenche o email clica em login envia para o supabase, recebe um email com magic-link.
  2. Ao clicar no link de login o supabase redireciona para um url do seu frontend com um access_token na url.
  3. Client do supabase remove o access token da url (localhost:8000/#access_token=…) e realiza uma request para coletar os dados do usuário owner do token
  4. Supabase retornar uma sessão
  5. O Front irá chamar nossa api passando essa sessão
  6. Nossa api irá pegar a sessão do usuário e chamar a api do supabase para coletar os dados e valirdar a sessão
  7. Caso a sessão seja válida irá criar no banco de dados da nossa api (uuid, external_uuid, email, created_at) informações do usuário que está com uma sessão autorizada.
  8. O front tem uma sessão do backend authorizada.

Sempre que uma request for feita para nosso backend iremos verificar no supabase se é um usuário válido de uma sessão válida, caso sejá uma sessão inválida iremos negar a request.