UNPKG

@qelos/auth

Version:

Express Passport authentication service

51 lines (42 loc) 1.46 kB
import logger from '../services/logger'; import User, { UserDocument, UserModel } from '../models/user'; import { verifyRefreshToken } from '../services/tokens'; export async function refreshToken(req, res) { if (!req.headers.authorization) { return res.status(401).end() } // get the last part from an authorization header string like "bearer token-value" const token = req.headers.authorization.split(' ')[1] const tenant = req.headers.tenant = req.headers.tenant || '0' try { const decoded = await verifyRefreshToken(token, tenant) as any; const user: UserDocument & UserModel = await User.findOne({ _id: decoded.sub, tenant: decoded.tenant }).exec() as any if (!user.tokens.some(token => token.tokenIdentifier === decoded.tokenIdentifier)) { throw new Error('refresh token not valid') } user.tokens = user.tokens.filter(token => token.tokenIdentifier !== decoded.tokenIdentifier); const newToken = user.getToken({ authType: 'oauth', workspace: decoded.workspace ? { _id: decoded.workspace } : null }); const refreshToken = user.getRefreshToken(newToken); await user.save() return res.json({ payload: { user: { email: user.email, name: user.name, roles: user.roles, }, token: newToken, refreshToken, } }).end() } catch (e) { logger.error(e); res.status(401).end() } }