UNPKG

@qelos/auth

Version:

Express Passport authentication service

48 lines (41 loc) 1.3 kB
import { NextFunction, Response } from 'express'; import passport from 'passport'; import {emitPlatformEvent} from '@qelos/api-kit'; import { validateSignUpForm, tokenPayload } from './signin-signup-token'; import {AuthRequest} from '../../types'; import {getRequestHost} from '../services/req-host'; export function signup (req:AuthRequest, res:Response, next:NextFunction) { const validationErrors = validateSignUpForm(req.body) if (Object.keys(validationErrors).length > 0) { return res.json({ errors: validationErrors }) } return passport.authenticate('local-signup', (err, data) => { if (err) { if (err.name === 'MongoError' && err.code === 11000) { // the 11000 Mongo code is for a duplication email error return res.json({ errors: { email: 'DUPLICATED_EMAIL' } }) } return res.json({ errors: { '': 'FORM_SUBMISSION_FAILED' } }) } tokenPayload(getRequestHost(req), res, data); emitPlatformEvent({ tenant: req.headers.tenant, user: data.user._id, source: 'auth', kind: 'signup', eventName: 'user-registered', description: 'user registered', metadata: { user: data.user, } }) })(req, res, next) }