-
Notifications
You must be signed in to change notification settings - Fork 0
Auth
Esta página é dedicada ao grupo de rotas responsável pela implementação e gerenciamento de autenticação de usuários, garantindo o acesso de clientes aos produtos da Swibly.
- Grupo:
/v1/auth - Exemplos:
/v1/auth/register,/v1/auth/login, ...
Warning
Isso não será explicado novamente: quando houver tipo (string, int etc.) na chave, tal será volátil.
Exemplo:
Um equivalente em Typescript seria: Record<string, 0> que é o mesmo que { [x: string]: 0 }
{
"firstname": "string",
"lastname": "string",
"username": "string",
"email": "string",
"password": "string"
}- Statuses possíveis:
200,400,401,500
{
"message": "string",
"token": "string"
}{
"error": "string"
}{
"error": {
"string": "string"
}
}O "error" pode ser um
Objectque contenhachave:valor. Ondechaveé o campo que foi colocado incorretamente.
- Nenhum
{
"username": "string (opcional)",
"email": "string (opcional)",
"password": "string"
}NOTA: Caso não exista
username, nem
- Statuses possíveis:
200,400,401,500
{
"message": "string",
"token": "string"
}{
"error": "string"
}{
"error": {
"string": "string"
}
}O "error" pode ser um
Objectque contenhachave:valor. Ondechaveé o campo que foi colocado incorretamente.
- Nenhum
{
"firstname": "string (opcional)",
"lastname": "string (opcional)",
"username": "string (opcional)",
"bio": "string (opcional)",
"verified": "string (opcional)",
"email": "string (opcional)",
"password": "string (opcional)",
"country": "string (opcional)",
"language": "string (opcional)"
}- Statuses possíveis:
200,400,401,500
{
"message": "string"
}{
"error": "string"
}{
"error": {
"string": "string"
}
}O "error" pode ser um
Objectque contenhachave:valor. Ondechaveé o campo que foi colocado incorretamente.
- Bearer/Authorization (Autenticação JWT)
Não é necessário um body.
- Statuses possíveis:
200,400,401,500
{
"message": "string"
}{
"error": "string"
}{
"error": {
"string": "string"
}
}O "error" pode ser um
Objectque contenhachave:valor. Ondechaveé o campo que foi colocado incorretamente.
- Bearer/Authorization (Autenticação JWT)
Caution
Este exemplo NÃO deve ser usado em ambiente de produção devido à sua origem de demonstração e falta de tratamento de erros.
// Para este exemplo, utilizaremos o pacote `axios`
// que pode ser facilmente instalado via `npm`, `yarn`,
// `pnpm`, `bun` ou similar
//
// Exemplo: `bun i axios`
//
// A tipagem de dados se encontra na seção abaixo, desta Wiki: `RegisterBody`, `Return` etc.
import axios from "axios";
// Definimos uma URL base para todas as nossas operações posteriores
const baseURL = "https://api.swibly.com.br/v1/auth";
async function registerUser(newUser: RegisterBody): Promise<string> {
try {
// `axios.post` manda uma requisição POST para o URL com o objeto de usuário
const response = await axios.post(`${baseURL}/register`, newUser);
const data = response.data as Return;
// `data.token` seria o token JWT para autenticação
return data.token!;
} catch (e: any) {
if (e.response.data.error) {
// No mundo real teria uma maior atenção no tratamento de erros,
// já que, o `e.data.error` pode retornar tanto uma string quanto um objeto
console.log(e.response.data.error);
}
return "";
}
}
// Para que este tutorial seja mais conciso, não irei colocar todos os métodos possíveis, apenas os relevantes.
async function deleteUser(token: string): Promise<void> {
try {
await axios.delete(`${baseURL}/delete`, {
headers: {
Authorization: token,
},
});
} catch (e: any) {
if (e.response.data.error) {
console.log(e.response.data.error);
}
}
}
// ATENÇÃO: Este usuário é usado APENAS para demonstração e não tem utilidade real em nosso banco de dados.
const token = await registerUser({
firstname: "André",
lastname: "Albanese",
username: "devkcud",
email: "devkcud@swibly.com.br",
password: "C0mpl3%P@$sW0rd!",
});
await deleteUser(token);type RegisterBody = {
firstname: string;
lastname: string;
username: string;
email: string;
password: string;
};
type LoginBody = {
username?: string;
email?: string;
password: string;
};
type UpdateBody = {
firstname?: string;
lastname?: string;
username?: string;
bio?: string;
verified?: string;
email?: string;
password?: string;
country?: string;
language?: string;
};
type DeleteBody = {};
type Return = {
readonly message?: string;
readonly token?: string;
readonly error?: string | Record<string, string>;
};
{ // Aqui `"string"` será uma chave volátil (poderá mudar, não será fixo). Diferente de `0`, que será seu valor fixo. "string": 0 }