improve token generation

This commit is contained in:
SrGooglo 2023-04-08 22:28:24 +00:00
parent 91d7ae8c4a
commit 0bc7776564
3 changed files with 28 additions and 23 deletions

View File

@ -18,7 +18,13 @@ export default {
}) })
} }
const token = await Token.createNewAuthToken(user, options) const token = await Token.createNewAuthToken({
username: user.username,
user_id: user._id.toString(),
ip_address: req.headers["x-forwarded-for"].split(",")[0] || req.socket.remoteAddress,
client: req.headers["user-agent"],
signLocation: global.signLocation,
}, options)
return res.json({ token: token }) return res.json({ token: token })
})(req, res) })(req, res)

View File

@ -1,7 +1,7 @@
import jwt from "jsonwebtoken" import jwt from "jsonwebtoken"
import { Session, RegenerationToken } from "../../models" import { Session, RegenerationToken } from "@models"
export async function regenerateSession(expiredToken, refreshToken) { export async function regenerateSession(expiredToken, refreshToken, aggregateData = {}) {
// search for a regeneration token with the expired token (Should exist only one) // search for a regeneration token with the expired token (Should exist only one)
const regenerationToken = await RegenerationToken.findOne({ refreshToken: refreshToken }) const regenerationToken = await RegenerationToken.findOne({ refreshToken: refreshToken })
@ -60,7 +60,12 @@ export async function regenerateSession(expiredToken, refreshToken) {
} }
// generate a new token // generate a new token
const newToken = await createNewAuthToken(decodedExpiredToken, { const newToken = await createNewAuthToken({
username: decodedExpiredToken.username,
session_uuid: session.session_uuid,
user_id: decodedExpiredToken.user_id,
ip_address: aggregateData.ip_address,
}, {
updateSession: session._id, updateSession: session._id,
}) })
@ -121,18 +126,7 @@ export async function createNewRegenerationToken(expiredToken) {
return regenerationToken return regenerationToken
} }
export async function createNewAuthToken(user, options = {}) { export async function createNewAuthToken(payload, options = {}) {
const payload = {
user_id: user._id ?? user.user_id,
username: user.username,
email: user.email,
signLocation: global.signLocation,
}
return await signNewAuthToken(payload, options)
}
export async function signNewAuthToken(payload, options = {}) {
if (options.updateSession) { if (options.updateSession) {
const sessionData = await Session.findOne({ _id: options.updateSession }) const sessionData = await Session.findOne({ _id: options.updateSession })
@ -141,7 +135,12 @@ export async function signNewAuthToken(payload, options = {}) {
payload.session_uuid = global.nanoid() payload.session_uuid = global.nanoid()
} }
const token = jwt.sign(payload, global.jwtStrategy.secretOrKey, { const token = jwt.sign({
session_uuid: payload.session_uuid,
username: payload.username,
user_id: payload.user_id,
signLocation: payload.signLocation,
}, global.jwtStrategy.secretOrKey, {
expiresIn: global.jwtStrategy.expiresIn ?? "1h", expiresIn: global.jwtStrategy.expiresIn ?? "1h",
algorithm: global.jwtStrategy.algorithm ?? "HS256" algorithm: global.jwtStrategy.algorithm ?? "HS256"
}) })
@ -151,16 +150,14 @@ export async function signNewAuthToken(payload, options = {}) {
session_uuid: payload.session_uuid, session_uuid: payload.session_uuid,
username: payload.username, username: payload.username,
user_id: payload.user_id, user_id: payload.user_id,
location: payload.signLocation,
ip_address: payload.ip_address,
client: payload.client,
date: new Date().getTime(), date: new Date().getTime(),
location: payload.signLocation ?? "rs-auth",
} }
if (options.updateSession) { if (options.updateSession) {
await Session.findByIdAndUpdate(options.updateSession, { await Session.findByIdAndUpdate(options.updateSession, session)
token: session.token,
date: session.date,
location: session.location,
})
} else { } else {
let newSession = new Session(session) let newSession = new Session(session)

View File

@ -8,5 +8,7 @@ export default {
user_id: { type: String, required: true }, user_id: { type: String, required: true },
date: { type: Number, default: 0 }, date: { type: Number, default: 0 },
location: { type: String, default: "Unknown" }, location: { type: String, default: "Unknown" },
ip_address: { type: String, default: "Unknown" },
client: { type: String, default: "Unknown" },
} }
} }