/oauth2server

Primary LanguageJavaScript

Backend

Copie o arquivo .env.example com o nome .env e configure o acesso ao banco

Depois é só instalar os módulos, executar as migrations e rodar o watch para dev:

npm run migrations
npm install
npm run watch

Caso dê algum problema nas migrations execute npm run rollback

TO-DO

  • Montar estrutura básica do projeto
  • Adicionar banco de dados com migrations (bookshelfjs/knexjs)
  • Implementar model do OAuth2
  • Definir e ver como funcionam scopes do OAuth2
  • Remover dados sensíveis e/ou desnecessários do model do OAuth2
  • Adicionar biblioteca de validação (Joi/express-validation)
  • Implementar cadastro e login (padrão OAuth2)
  • Implementar criptografia de senha (hash/bcrypt)
  • Implementar "Esqueci minha senha"
  • Implementar login com e-mail e senha (custom)
  • Implementar login com Facebook
  • Implementar login com Google+
  • Implementar documentação de API (Swagger/Slate)
  • Utilizar bibliotecas de testes
  • Padronizar erros
  • Definir raiz da API (versionamento)

Como funciona

Banco de dados

Foram utilizados as bibliotecas Bookshelf.js e Knex.js

O Knex.js é um QueryBuilder bem completo, é utilizado na criação de migrations (exemplos dentro do diretório migrations, onde no exports.up estão os métodos executados na criação e exports.down estão os métodos para desfazer a migration). Para criar uma nova migration, o ideal é instalar ele em modo global (npm i -g knex). Mais detalhes em sua documentação oficial.

O Bookshelf.js é um ORM que utiliza o Knex como base, configuramos as tabelas (bookshelf.Model), e seus relacionamentos, a partir dos Models fazemos as consultas.

As configurações do banco de dados DB_HOST, DB_USER, DB_PASS, e DB_NAME devem ser setadas no arquivo .env, único para cada ambiente, e estão sendo utilizadas no arquivo model/bookshelf.js.

Autenticação

Para a autenticação, foi utilizado o oauth2-server, não vem uma implementação do model por padrão e a oficial para o express (link) não está atualizada, por isso neste projeto foi feita uma nova implementação no arquivo oauth/model.js.

Documentação Oficial

O OAuth é configurado no arquivo oauth/index.js, lá também temos o middleware de autorização authorize, para proteger as rotas e o método de configuração configure para criar os endpoins, no caso só foi implementado um único endpoint que pode ser acessado por todos os requests, utilizando o método padrão do oauth2, com somente o grant password habilitado no momento:

GET ou POST /oauth/token Headers: - Authorization: Basic token Corpo (form-data/query): - username=usuario - password=senha - grant_type=password

Endpoints

POST /user/login

Estrutura de pastas

.
|____controllers                    // Diretório dos controllers
| |____user.js                      // UserController
|____index.js                       // Arquivo principal, configuraçoes do backend em si
|____knexfile.js                    // Configuração do BD para rodar as migrations do knex
|____migrations                     // Diretório onde são criadas as migrations
| |____20170923102752_oauth.js      // Migration para criar as tabelas o OAuth e Usuário básico
| |____20170923111458_oauth_fk.js   // FK's das tabels do OAuth
|____model                          // Models
| |____bookshelf.js                 // Configs do MySQL e bookshelf para reutilizar nos models
| |____OAuth.js
| |____User.js
|____oauth
| |____index.js                     // Configurações/EP`s do OAuth
| |____model.js                     // Implementação do model do OAuth utilizando bookshelf/knex
|____package-lock.json
|____package.json
|____README.md
|____routes                         // Diretório de configuração das rotas (EP`s)
  |____user.js                      // EP`s para usuário (/user/*)
  |____validations                  // Diretório para os middlewares de validação
    |____user.js