@jvhaile/loopback4-helper
Version:
Helper components and tools for loopback 4.
56 lines (48 loc) • 1.6 kB
text/typescript
import {BindingScope, inject, injectable} from '@loopback/core';
import {HttpErrors} from '@loopback/rest';
import {promisify} from 'util';
import {JWTBindings} from "../keys";
const jwt = require('jsonwebtoken');
const signAsync = promisify(jwt.sign);
const verifyAsync = promisify(jwt.verify);
({scope: BindingScope.SINGLETON})
export class JWTService {
constructor(
(JWTBindings.TOKEN_SECRET)
private jwtSecret: string,
(JWTBindings.TOKEN_EXPIRES_IN)
private jwtExpiresIn: string,
) {
}
async verifyToken(token: string): Promise<any> {
if (!token) {
throw new HttpErrors.Unauthorized(
`Error verifying token : 'token' is null`,
);
}
try {
return await verifyAsync(token, this.jwtSecret);
} catch (error) {
throw new HttpErrors.Unauthorized(
`Error verifying token : ${error.message}`,
);
}
}
async generateToken(object: any): Promise<string> {
if (!object) {
throw new HttpErrors.Unauthorized(
'Error generating token : userProfile is null',
);
}
let token: string;
try {
token = await signAsync(object, this.jwtSecret, {
expiresIn: Number(this.jwtExpiresIn),
});
} catch (error) {
console.log("CREATE TOKEN ERROR",error);
throw new HttpErrors.Unauthorized(`Error encoding token : ${error}`);
}
return token;
}
}