summaryrefslogtreecommitdiffstats
path: root/server/models
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-26 22:20:54 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-26 22:20:54 +0100
commitf2fcc41cb17ece1fc5acf57809c5e3d61c236133 (patch)
treea103a0dd371c5f7fd5d7e3105fef0730c8594827 /server/models
parent627239499c7c9fb5e7af68b2e79e01d0523f5d8f (diff)
downloadwebsite_creator-f2fcc41cb17ece1fc5acf57809c5e3d61c236133.tar.gz
website_creator-f2fcc41cb17ece1fc5acf57809c5e3d61c236133.tar.bz2
website_creator-f2fcc41cb17ece1fc5acf57809c5e3d61c236133.zip
completed jwt token login with refresh token, reduced db calls
Diffstat (limited to 'server/models')
-rw-r--r--server/models/Session.js23
-rw-r--r--server/models/User.js33
2 files changed, 23 insertions, 33 deletions
diff --git a/server/models/Session.js b/server/models/Session.js
index c410bb9..06a4369 100644
--- a/server/models/Session.js
+++ b/server/models/Session.js
@@ -1,20 +1,31 @@
const mongoose = require("mongoose");
+const jwt = require('jsonwebtoken');
const sessionSchema = new mongoose.Schema({
- user: {
+ userId: {
type : mongoose.Schema.Types.ObjectId,
ref : 'User'
},
- refreshToken: {
- type: String,
- required: true
- },
lastAccess: {
type: Date,
default: Date.now(),
- index: { expires: 90 }
+ index: { expires: parseInt(process.env.DB_SESSION_MAX_AGE) }
}
});
+sessionSchema.methods.setAccessDate = function (user) {
+ this.lastAccess = Date.now();
+ console.log('refreshing time in db')
+ this.save();
+}
+
+sessionSchema.methods.generateJwtToken = function (user) {
+ return jwt.sign(
+ { sessionId: this._id.toString(), user: JSON.stringify(user) },
+ process.env.JWT_SECRET,
+ { expiresIn: parseInt(process.env.JWT_TOKEN_MAX_AGE) }
+ );
+};
+
module.exports = mongoose.model('Session', sessionSchema);
diff --git a/server/models/User.js b/server/models/User.js
index ef3d94e..02cfe25 100644
--- a/server/models/User.js
+++ b/server/models/User.js
@@ -1,8 +1,5 @@
const mongoose = require("mongoose");
const bcrypt = require('bcryptjs');
-const randtoken = require('rand-token');
-const jwt = require('jsonwebtoken');
-const Session = require('./Session');
const userSchema = new mongoose.Schema({
email: {
@@ -25,31 +22,13 @@ const userSchema = new mongoose.Schema({
min: 4,
max: 1024,
},
-});
-
-userSchema.methods.generateJwtToken = async function (currentRefToken) {
- const refreshToken = currentRefToken ? currentRefToken : randtoken.uid(256);
-
- if (!currentRefToken) {
- const session = new Session({ user: this, refreshToken });
- await session.save();
+ language: {
+ type: String,
+ required: true,
+ min: 2,
+ max: 2,
}
-
- return jwt.sign(
- { _id: this._id.toString(), refreshToken },
- process.env.JWT_SECRET,
- { expiresIn: parseInt(process.env.JWT_TOKEN_MAX_AGE) }
- );
-}
-
-userSchema.methods.endSession = async function (ref) {
- this.sessions = this.sessions.filter((session) => {
- return session.ref !== ref;
- });
-
- await this.save();
- return null;
-}
+});
userSchema.statics.findByCredentials = async (email, password) => {
const user = await User.findOne({ email });