@qelos/auth
Version:
Express Passport authentication service
58 lines (54 loc) • 1.74 kB
text/typescript
import User, { UserDocument } from '../models/user';
import { setToken } from '../services/users';
import { defaultAuthType, defaultRole } from '../../config';
import { Strategy } from 'passport-local';
import { getAbsoluteDate } from '../services/dates';
/**
* Return the Passport Local Strategy object.
*/
module.exports = new Strategy(
{
usernameField: 'username',
passwordField: 'password',
session: false,
passReqToCallback: true,
},
(req, username = '', password, done) => {
const { name, fullName, firstName, lastName, birthDate } = req.body || {};
const newUser = new User({
tenant: req.headers.tenant,
username: username.toLowerCase().trim() || req.body?.email?.toLowerCase().trim(),
password: password.trim(),
fullName: fullName || name || (`${firstName} ${lastName}`),
firstName,
lastName,
birthDate: birthDate ? getAbsoluteDate(birthDate) : undefined,
roles: [defaultRole],
});
const authType = req.body.authType || defaultAuthType;
setToken({ user: newUser }, authType)
.then(({
user,
token,
refreshToken,
cookieToken
}: { user: UserDocument, token: string, refreshToken: string, cookieToken: string }) => {
done(null, {
tenant: req.headers.tenant,
token,
refreshToken,
cookieToken,
user: {
username: user.username,
email: user.email,
name: user.fullName,
fullName: user.fullName,
firstName: user.firstName,
lastName: user.lastName,
roles: user.roles,
},
});
})
.catch(done);
}
);