Skip to content

Expressjs app that uses authentication middleware+JWT to manage jobs.

Notifications You must be signed in to change notification settings

theusmanyousaf/jobs-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Jobs API

About

How to use this project:

we register as a new user and later we can login as existing user, here we can manage(create,read,update,delete) multiple jobs.only the user that is logged in has access to the job operations.the user wont be able to manipulate other user's jobs as all users are protected with auth middleware that uses userId+JWT token that is provided once the user is logged in or registers.

Setup

npm install && npm start

Database Connection

  1. Import connect.js
  2. Invoke in start()
  3. Setup .env in the root
  4. Add MONGO_URI with correct value

Routers

  • auth.js
  • jobs.js

User Model

Email Validation Regex

/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

Register User

  • Validate - name, email, password - with Mongoose
  • Hash Password (with bcryptjs)
  • Save User
  • Generate Token
  • Send Response with Token

Login User

  • Validate - email, password - in controller
  • If email or password is missing, throw BadRequestError
  • Find User
  • Compare Passwords
  • If no user or password does not match, throw UnauthenticatedError
  • If correct, generate Token
  • Send Response with Token

Mongoose Errors

  • Validation Errors
  • Duplicate (Email)
  • Cast Error

Security

  • helmet
  • cors
  • xss-clean
  • express-rate-limit

Swagger UI

/jobs/{id}:
  parameters:
    - in: path
      name: id
      schema:
        type: string
      required: true
      description: the job id

About

Expressjs app that uses authentication middleware+JWT to manage jobs.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published