UNPKG

synt_backend

Version:

Synt light-weight node backend service

55 lines (49 loc) 1.4 kB
const db = require("./../mysql/models/index"); const config = require("./../config/jwt-config.json"); const jwt = require("jsonwebtoken"); module.exports = { getDecodedToken, getAuthUser, addJwtToken, }; function getDecodedToken(req) { if (!req.headers["x-access-token"] && !req.headers["authorization"]) { return null; } let token = req.headers["x-access-token"] || req.headers["authorization"]; // Express headers are auto converted to lowercase if (token.startsWith("Bearer ")) { // Remove Bearer from string token = token.slice(7, token.length); let decoded = jwt.verify(token, config.secret); return decoded; } return null; } async function getAuthUser(req) { const decoded = getDecodedToken(req); if (decoded && decoded.UserId) { let User = await db.User.findOne({ where: { id: decoded.UserId } }); if (User) { User.VMEId = decoded.VMEId || null; User.DeviceId = decoded.DeviceId || null; return User; } } console.log("JWT problem"); return null; } function addJwtToken(User, VMEId, DeviceId) { const token = jwt.sign( { UserId: User.id, VMEId, DeviceId }, process.env.JWT_SECRET ); // FIXME: check type or something instead of try/catch try { User = User.toJSON(); } catch { console.log("User already json?"); } User.token = token; User.token_type = "Bearer"; return User; }