- Node 14+;
- NPM 8+;
- Docker Compose 1.26+;
- Nodemon (opcional);
- MongoDB Compass ou qualquer outro client/ferramenta de consulta para Mongo (opcional).
-
Instale as dependências do projeto:
npm install
-
Provisione localmente o banco de dados:
$ docker-compose up -d
Para provisionar a aplicação locamente, faça:
$ nodemon server.js
- Crie um model nominado
User
que contenha os campos:-
username
: afim de receber o nome de usuário; -
email
: afim de receber o e-mail de usuário; -
password
: afim de receber a senha de usuário.
-
- Importe o model recentemente criado (
User
) no arquivomodels/index.js
; - Crie um controller nominado
auth
e implemente os seguintes métodos:-
signUp
para permitir a criação de novos usuários;- Realize o hash da senha de usuário usando
bcrypt
.
- Realize o hash da senha de usuário usando
-
signIn
para permitir a autenticação de usuários.- Valide se usuário existe;
- Valide se a senha está correta;
- Gere o token de autenticação de usuário.
-
- Crie um middleware nominado
verifySignUp
que contenha um método que valide a duplicidade de usuários através dousername
ouemail
. - Crie um arquivo de rotas nominado
auth
e implemente as seguintes rotas:-
POST /api/auth/signup
:- Atribua o middleware de checagem de duplicidade de usuários;
- Retorne o controller
signUp
criado acima.
-
POST /api/auth/signin
:- Retorno o controller
signIn
criado acima.
- Retorno o controller
-
- Crie um novo middleware nominado
authJwt
que contenha o seguinte método:-
verifyToken
: para verificar se o token de autenticação existe e é válido (o usaremos em breve).
-
- Crie um model nominado
Role
que contenha o camponame
(nome/descrição do papel de usuário); - Importe o model recentemente criado (
Role
) no arquivomodels/index.js
; - No arquivo
models/index.js
especifique as 'roles' (papéis) a serem utilizados; - Adapte o model
User
para que possa receber o camporoles
referenciando o modelRole
; - Adapte o método
signUp
em controllerauth
para receber e cadastrar os papéis de usuários; - Adapte o método
signIn
em controllerauth
para popular e retornar os papéis de usuários; - No middleware
verifySignUp
, crie um novo método que verifique se o(s) papél(is) de usuário passado(s) são válidos; - Adapte a rota
POST /api/auth/signup
atribuindo o middleware de validação de papéis criado acima; - Crie os seguintes métodos auxiliares no middleware
authJwt
(os usaremos em breve):-
isAdmin
: verifica se usuário é administrador; -
isModerator
: verifica se usuário é moderador.
-
- Crie um controller nominado
user
e implemente os seguintes métodos:-
publicAccess
: que deve retornar conteúdo público; -
userBoard
: que deve retornar conteúdo restrito a usuários autenticados; -
adminBoard
: que deve retornar conteúdo restrito a usuários autenticados e administradores; -
moderatorBoard
: que deve retornar conteúdo restrito a usuários autenticados e moderadores.
-
- Crie um arquivo de rotas nominado
user
e implemente as seguintes rotas:-
GET /api/public
:- Retorne o controller
publicAccess
criado acima.
- Retorne o controller
-
GET /api/dashboard/user
:- Atribua o middleware
verifyToken
; - Retorne o controller
userBoard
criado acima.
- Atribua o middleware
-
GET /api/dashboard/mod
:- Atribua os middlewares
verifyToken
eisModerator
; - Retorne o controller
moderatorBoard
criado acima.
- Atribua os middlewares
-
GET /api/dashboard/admin
:- Atribua os middlewares
verifyToken
eisAdmin
; - Retorne o controller
adminBoard
criado acima.
- Atribua os middlewares
-