50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import { decode, sign, verify } from 'jsonwebtoken';
|
|
import { Component } from '@nestjs/common';
|
|
|
|
@Component()
|
|
export class TokenService {
|
|
sign(user: any) {
|
|
return sign(
|
|
{
|
|
id: user.id,
|
|
isStaff: user.isStaff,
|
|
isActive: user.isActive,
|
|
isSuperuser: user.isSuperuser,
|
|
groups: user.groups.map(group => {
|
|
return { name: group.name };
|
|
})
|
|
},
|
|
this.getSecretKey({
|
|
id: user.id,
|
|
isStaff: user.isStaff,
|
|
isActive: user.isActive,
|
|
isSuperuser: user.isSuperuser,
|
|
groups: user.groups
|
|
}),
|
|
{
|
|
expiresIn: process.env.JWT_EXPIRATION_DELTA
|
|
}
|
|
)
|
|
}
|
|
verify(token: string) {
|
|
const data: any = decode(
|
|
token
|
|
);
|
|
return verify(token, this.getSecretKey(data));
|
|
}
|
|
decode(token: string) {
|
|
return decode(
|
|
token
|
|
)
|
|
}
|
|
getSecretKey(data: any) {
|
|
return process.env.SECRET_KEY +
|
|
(data ? (
|
|
'$' + data.id +
|
|
'$' + data.isStaff +
|
|
'$' + data.isActive +
|
|
'$' + data.isSuperuser +
|
|
(data.groups ? data.groups.map(group => '$' + group.name) : '')
|
|
) : '');
|
|
}
|
|
} |