- primo aggiornamento myreccard

- aggiunta sito germogliamo.app
- aggiornato login con il parametro "browser_random" che serve per fare un login anche su 2 pagine contemporaneamente.
This commit is contained in:
Surya Paolo
2025-11-25 17:45:24 +01:00
parent c61572a715
commit 70698fab44
15 changed files with 134 additions and 50 deletions

View File

@@ -136,6 +136,10 @@ const UserSchema = new mongoose.Schema({
type: String,
default: '',
},
browser_random: {
type: String,
default: '',
},
date_login: {
type: Date,
},
@@ -571,7 +575,7 @@ UserSchema.methods.toJSON = function () {
return _.pick(userObject, ['_id', ...shared_consts.fieldsUserToChange()]);
};
UserSchema.methods.generateAuthToken = function (req) {
UserSchema.methods.generateAuthToken = function (req, browser_random) {
const user = this;
const useragent = req.get('User-Agent');
@@ -607,13 +611,24 @@ UserSchema.methods.generateAuthToken = function (req) {
const date_login = new Date();
// Controlla se il token è già presente per la coppia access-browser
const idx = user.tokens.findIndex((tok) => tok.access === access && tok.browser === browser);
/*
if (user.tokens) {
console.log('token salvati: ' + user.tokens.length);
} else {
console.log('⚠️ Nessun Token salvato! ');
}*/
// Controlla se il token è già presente per la tripla access-browser-browser_random
const idx = user.tokens.findIndex(
(tok) =>
tok.access === access && tok.browser === browser && (!browser_random || tok.browser_random === browser_random)
);
if (idx === -1) {
user.tokens.push({ access, browser, token, date_login, refreshToken });
user.tokens.push({ access, browser, token, date_login, refreshToken, browser_random });
} else {
// Se il token esiste già, sostituisce il valore vecchio con il nuovo
user.tokens[idx] = { access, browser, token, date_login, refreshToken };
user.tokens[idx] = { access, browser, token, date_login, refreshToken, browser_random };
}
user.lasttimeonline = new Date();
@@ -622,11 +637,11 @@ UserSchema.methods.generateAuthToken = function (req) {
.save()
.then(() => {
console.log('########## HO CREATO UN NUOVO TOKEN E REFRESHTOKEN !!!!! ----------- ');
return { token, refreshToken };
return { token, refreshToken, browser_random };
})
.catch((err) => {
console.log('Error', err.message);
return { token: '', refreshToken: '' };
return { token: '', refreshToken: '', browser_random };
});
};
@@ -802,7 +817,16 @@ UserSchema.statics.isFacilitatore = function (perm) {
*/
// Funzione helper separata per trovare l'utente
async function findUserByTokenAndAccess(User, decoded, token, typeaccess, withuser, withlean, project) {
async function findUserByTokenAndAccessAndBrowserRandom(
User,
decoded,
token,
typeaccess,
browser_random,
withuser,
withlean,
project
) {
try {
const query = {
_id: decoded._id,
@@ -810,6 +834,7 @@ async function findUserByTokenAndAccess(User, decoded, token, typeaccess, withus
$elemMatch: {
token,
access: typeaccess,
browser_random,
},
},
};
@@ -829,6 +854,7 @@ async function findUserByTokenAndAccess(User, decoded, token, typeaccess, withus
$elemMatch: {
token,
access: typeaccess,
browser_random,
},
},
};
@@ -842,7 +868,14 @@ async function findUserByTokenAndAccess(User, decoded, token, typeaccess, withus
}
// Funzione principale refactored
UserSchema.statics.findByToken = async function (token, typeaccess, con_auth, withuser, withlean = false) {
UserSchema.statics.findByToken = async function (
token,
typeaccess,
browser_random,
con_auth,
withuser,
withlean = false
) {
const User = this;
let code = server_constants.RIS_CODE_HTTP_INVALID_TOKEN;
let user = null;
@@ -884,7 +917,16 @@ UserSchema.statics.findByToken = async function (token, typeaccess, con_auth, wi
};
// Ricerca utente con funzione separata
user = await findUserByTokenAndAccess(User, decoded, token, typeaccess, withuser, withlean, project);
user = await findUserByTokenAndAccessAndBrowserRandom(
User,
decoded,
token,
typeaccess,
browser_random,
withuser,
withlean,
project
);
// Verifica scadenza token per idapp specifici
if (user) {
@@ -1634,7 +1676,6 @@ UserSchema.statics.setAmmissioneByTokenAndUsername = async function (idapp, user
const User = this;
try {
if (username === undefined) return false;
const myquery = {
@@ -1660,7 +1701,11 @@ UserSchema.statics.setAmmissioneByTokenAndUsername = async function (idapp, user
return recfound;
}
const rec = await User.findOneAndUpdate(myquery, { $set: { token_da_ammettere: token, date_token_ammettere: new Date(), } }, { new: true });
const rec = await User.findOneAndUpdate(
myquery,
{ $set: { token_da_ammettere: token, date_token_ammettere: new Date() } },
{ new: true }
);
return rec;
} catch (e) {
console.error('Error setAmmissione', e);
@@ -1677,7 +1722,13 @@ UserSchema.statics.findAmmissioneByTokenAndUsername = async function (idapp, tok
token_da_ammettere: token,
};
const rec = await User.findOne(myquery, { verified_by_aportador: 1, username: 1, aportador_solidario: 1, idapp: 1, lang: 1 });
const rec = await User.findOne(myquery, {
verified_by_aportador: 1,
username: 1,
aportador_solidario: 1,
idapp: 1,
lang: 1,
});
return rec && username.toLowerCase() === rec.username.toLowerCase() ? rec : null;
};