JWT processing fixed
This commit is contained in:
parent
e2dcaf25a0
commit
f353c2153a
@ -16,6 +16,7 @@ import { WebVisit } from "../models/web-visit.js";
|
|||||||
|
|
||||||
import UserService from "../services/user.js";
|
import UserService from "../services/user.js";
|
||||||
import { DtpService } from "../lib/service.js";
|
import { DtpService } from "../lib/service.js";
|
||||||
|
import { PopulateOptions } from "mongoose";
|
||||||
|
|
||||||
export enum SessionType {
|
export enum SessionType {
|
||||||
WEB = "web",
|
WEB = "web",
|
||||||
@ -30,6 +31,13 @@ interface UserWebToken {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class SessionService extends DtpService {
|
class SessionService extends DtpService {
|
||||||
|
private populateWebToken: PopulateOptions[] = [
|
||||||
|
{
|
||||||
|
path: "user",
|
||||||
|
select: "-passwordSalt -password",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
get name(): string {
|
get name(): string {
|
||||||
return "SessionService";
|
return "SessionService";
|
||||||
}
|
}
|
||||||
@ -48,13 +56,13 @@ class SessionService extends DtpService {
|
|||||||
webToken.user = user._id;
|
webToken.user = user._id;
|
||||||
|
|
||||||
const payload: UserWebToken = {
|
const payload: UserWebToken = {
|
||||||
_id: user._id.toString(),
|
_id: user._id,
|
||||||
email: user.email,
|
email: user.email,
|
||||||
displayName: user.displayName,
|
displayName: user.displayName,
|
||||||
webToken: webToken._id,
|
webToken: webToken._id,
|
||||||
};
|
};
|
||||||
const token = jwt.sign(payload, env.auth.jwtSecret, {
|
const token = jwt.sign(payload, env.auth.jwtSecret, {
|
||||||
expiresIn: "1h",
|
expiresIn: "24h",
|
||||||
});
|
});
|
||||||
|
|
||||||
webToken.token = token;
|
webToken.token = token;
|
||||||
@ -69,13 +77,16 @@ class SessionService extends DtpService {
|
|||||||
const payload = jwt.verify(token, env.auth.jwtSecret) as UserWebToken;
|
const payload = jwt.verify(token, env.auth.jwtSecret) as UserWebToken;
|
||||||
const userId = payload._id;
|
const userId = payload._id;
|
||||||
|
|
||||||
const webToken = await WebToken.findOne({ _id: payload.webToken });
|
const webToken = await WebToken.findOne({
|
||||||
|
_id: payload.webToken,
|
||||||
|
}).populate(this.populateWebToken);
|
||||||
if (!webToken) {
|
if (!webToken) {
|
||||||
const error = new Error("Invalid JSON Web Token");
|
const error = new Error("Invalid JSON Web Token");
|
||||||
error.name = "InvalidToken";
|
error.name = "InvalidToken";
|
||||||
error.statusCode = 401;
|
error.statusCode = 401;
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (webToken.expires < NOW) {
|
if (webToken.expires < NOW) {
|
||||||
await WebToken.deleteOne({ _id: webToken._id });
|
await WebToken.deleteOne({ _id: webToken._id });
|
||||||
const error = new Error("JSON Web Token has expired");
|
const error = new Error("JSON Web Token has expired");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user