Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cedric921/nestjs-jwt-boilerplate
https://github.com/cedric921/nestjs-jwt-boilerplate
Last synced: about 4 hours ago
JSON representation
- Host: GitHub
- URL: https://github.com/cedric921/nestjs-jwt-boilerplate
- Owner: Cedric921
- License: mit
- Created: 2023-12-12T11:35:23.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-10-25T13:44:52.000Z (26 days ago)
- Last Synced: 2024-10-26T17:12:59.018Z (25 days ago)
- Language: TypeScript
- Size: 1.3 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# NestJSApiBoilerplateJWT
An API Boilerplate to create a ready-to-use REST API in seconds with NestJS 10.x and JWT Auth System :heart_eyes_cat:
## Installation
```bash
$ npm install
```## Set Environment for secret key JWT and other configurations
```bash
$ cp .env.example .env
```To set up on multiple environments, such as dev, stage or prod, we do as follows:
```bash
$ cp .env.example .env.dev # or .env.stage, etc
```## Config settings .env for sending a notification when a user registers, forgets password or changes password
```
EMAIL_HOST=smtp.mailtrap.io
EMAIL_PORT=2525
EMAIL_AUTH_USER=[:user]
EMAIL_AUTH_PASSWORD=[:password]
EMAIL_DEBUG=true
EMAIL_LOGGER=true
EMAIL_LAYOUT_DIR='templates/emails/'
EMAIL_PARTIAL_DIR='templates/emails/'
EMAIL_VIEW_PATH='/templates/emails/'
EMAIL_DEFAULT_LAYOUT='index'
```## Config settings .env to connect MySQL
Once the database has been configured, start the Nest App via `npm run start:dev` it automatically synchronizes the entities so it is ready to use. :heart_eyes_cat:
```
TYPEORM_CONNECTION = "mysql"
TYPEORM_HOST = "localhost"
TYPEORM_PORT = 3306
TYPEORM_USERNAME = [:user]
TYPEORM_PASSWORD = [:password]
TYPEORM_DATABASE = [:database]
TYPEORM_AUTO_SCHEMA_SYNC = true
TYPEORM_ENTITIES = "dist/**/*.entity.js"
TYPEORM_SUBSCRIBERS = "dist/subscriber/**/*.js"
TYPEORM_MIGRATIONS = "dist/migrations/**/*.js"
TYPEORM_ENTITIES_DIR = "src/entity"
TYPEORM_MIGRATIONS_DIR = "src/migration"
TYPEORM_SUBSCRIBERS_DIR = "src/subscriber"
```## Install TypeScript Node
```bash
$ npm install -g ts-node
```## Running migrations with typeorm
```bash
$ ts-node node_modules/.bin/typeorm migration:run -d dist/typeorm-cli.config
```or
```bash
$ node_modules/.bin/typeorm migration:run -d dist/typeorm-cli.config
```## Running the app
```bash
# development
$ npm run start# watch mode
$ npm run start:dev# production mode
$ npm run start:prod
```## Running the app in REPL mode
```bash
$ npm run start -- --entryFile repl
```or
```bash
$ npm run start:repl
```## Docker
There is a `docker-compose.yml` file for starting MySQL with Docker.
`$ docker-compose up db`
After running, you can stop the Docker container with
`$ docker-compose down`
## Url Swagger for Api Documentation
```
http://127.0.0.1:3000/docs
```
or```
http://127.0.0.1:3000/docs-json
```
or```
http://127.0.0.1:3000/docs-yaml
```
Configure `SWAGGER_USER` and `SWAGGER_PASSWORD` in the .env file and set `NODE_ENV` to `local` or `dev` or `staging` to access the SWAGGER(Open API) documentation with basic authentication.
```
NODE_ENV=[:enviroments]
SWAGGER_USER=[:user]
SWAGGER_PASSWORD=[:password]````
If you want to add more environments, include them in the `SWAGGER_ENVS` array in `main.ts`, see the following:
```typescript
const SWAGGER_ENVS = ['local', 'dev', 'staging'];
````## Configuring the NODE_API_PORT environment variable as the default port if you don't want to use the default
```
NODE_API_PORT=3333
```## Configuring the ENDPOINT_CORS environment variable for app frontend
```
ENDPOINT_CORS='http://127.0.0.1:4200'
```## Getting secure resource with Curl
```bash
$ curl -H 'content-type: application/json' -v -X GET http://127.0.0.1:3000/api/secure -H 'Authorization: Bearer [:token]'
```## Generate Token JWT Authentication with Curl
```bash
$ curl -H 'content-type: application/json' -v -X POST -d '{"email": "[email protected]", "password": "secret"}' http://127.0.0.1:3000/api/auth/login
```## Registration user with Curl
```bash
$ curl -H 'content-type: application/json' -v -X POST -d '{"name": "tony", "email": "[email protected]", "username":"tony_admin", "password": "secret"}' http://127.0.0.1:3000/api/auth/register
```## Refresh token with curl
```bash
$ curl -H 'content-type: application/json' -v -X POST -d '{"refreshToken": "[:token]"}' http://127.0.0.1:3000/api/auth/refresh-tokens
```## Forgot password with curl
```bash
$ curl -H 'content-type: application/json' -v -X POST -d '{"email": "[email protected]"}' http://127.0.0.1:3000/api/auth/forgot-password
```## Change password User with curl
```bash
$ curl -H 'content-type: application/json' -v -X POST -d '{"email": "[email protected]", "password": "secret123"}' http://127.0.0.1:3000/api/auth/change-password -H 'Authorization: Bearer [:token]'
```## Update profile User with curl
```bash
$ curl -H 'content-type: application/json' -v -X PUT -d '{"name": "tony", "email": "[email protected]", "username": "tony_admin"}' http://127.0.0.1:3000/api/users/:id/profile -H 'Authorization: Bearer [:token]'
```## Users list with Curl
```bash
$ curl -H 'content-type: application/json' -H 'Accept: application/json' -v -X GET http://127.0.0.1:3000/api/users -H 'Authorization: Bearer [:token]'
```## User by Id with Curl
```bash
$ curl -H 'content-type: application/json' -H 'Accept: application/json' -v -X GET http://127.0.0.1:3000/api/users/:id -H 'Authorization: Bearer [:token]'
```## Update User with Curl
```bash
$ curl -H 'content-type: application/json' -v -X PUT -d '{"name": "tony", "email": "[email protected]", "username": "tony_admin", "password":"secret"}' http://127.0.0.1:3000/api/users/:id -H 'Authorization: Bearer [:token]'
```## Delete User by Id with Curl
```bash
$ curl -H 'content-type: application/json' -H 'Accept: application/json' -v -X DELETE http://127.0.0.1:3000/api/users/:id -H 'Authorization: Bearer [:token]'
```## License
[MIT licensed](LICENSE)