northwind-rest-api
Version:
Local REST API Exposing 'Northwind Traders' Database.
73 lines (60 loc) • 2.12 kB
JavaScript
const express = require("express");
const User = require("../models/user");
const Credentials = require("../models/credentials");
const authLogic = require("../business-logic/auth-logic");
const verifyToken = require("../middleware/verify-token");
const jwt = require("jsonwebtoken");
const router = express.Router();
// Register:
router.post("/register", async (request, response) => {
try {
// Data:
const user = new User(request.body);
// Validation:
const errors = user.validate();
if (errors) return response.status(400).send(errors);
if(await authLogic.isEmailTaken(user.email)) return response.status(400).send(`Email "${user.email}" already taken.`);
// Logic:
const token = await authLogic.register(user);
// Success:
response.status(201).json(token);
}
catch (err) {
response.status(500).send(err.message);
}
});
// Login:
router.post("/login", async (request, response) => {
try {
// Data:
const credentials = new Credentials(request.body);
// Validation:
const errors = credentials.validate();
if (errors) return response.status(400).send(errors);
// Logic:
const token = await authLogic.login(credentials);
if (!token) return response.status(401).send("Incorrect email or password.");
// Success:
response.json(token);
}
catch (err) {
response.status(500).send(err.message);
}
});
// Refresh token:
router.post("/refresh-token", verifyToken, async (request, response) => {
try {
// Data:
const oldToken = request.headers.authorization.substring(7); // Bearer the-token
const payload = jwt.decode(oldToken);
const user = payload.user;
// Logic:
const newToken = authLogic.refreshToken(user);
// Success:
response.json(newToken);
}
catch (err) {
response.status(500).send(err.message);
}
});
module.exports = router;