- Node >= 16.x
 - NPM >= 8.x (update NPM executing 
npm i -g npm) - Unix-like shell (Gitbash/bash/zsh)
 
- Fork, clone, and 
npm install. - Build your database executing 
npm run migrate. - Run tests locally executing 
npm test. 
Dad jokes are all the rage these days! In this challenge, you will build a real wise-guy application.
Users must be able to call the [POST] /api/auth/register endpoint to create a new account, and the [POST] /api/auth/login endpoint to get a token.
We also need to make sure nobody without the token can call [GET] /api/jokes and gain access to our dad jokes.
We will hash the user's password using bcryptjs, and use JSON Web Tokens and the jsonwebtoken library.
Your finished project must include all of the following requirements (further instructions are found inside each file):
-  An authentication workflow with functionality for account creation and login, implemented inside 
api/auth/auth-router.js. -  Middleware used to restrict access to resources from non-authenticated requests, implemented inside 
api/middleware/restricted.js. -  A minimum of 2 tests per API endpoint, written inside 
api/server.test.js. 
IMPORTANT Notes:
- Codegrade is running some tests you cannot see in this repo. Make sure to comply with project instructions to the letter!
 - Do not exceed 2^8 rounds of hashing with 
bcryptjs. - If you use environment variables make sure to provide fallbacks in the code (e.g. 
process.env.SECRET || "shh"). - You are welcome to create additional files but do not move or rename existing files or folders.
 - Do not alter your 
package.jsonfile except to install extra libraries. Do not update existing packages. - The database already has the 
userstable, but if you run into issues, the migration is available. - In your solution, it is essential that you follow best practices and produce clean and professional results.
 - Schedule time to review, refine, and assess your work and perform basic professional polishing.