summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-11-24 00:17:38 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-11-24 01:35:29 +0100
commit627239499c7c9fb5e7af68b2e79e01d0523f5d8f (patch)
tree158debb793fab18c02d965a590f1559450030207
parent6adb6ece4ce856acc56e3eab07b39cf8df594587 (diff)
downloadwebsite_creator-627239499c7c9fb5e7af68b2e79e01d0523f5d8f.tar.gz
website_creator-627239499c7c9fb5e7af68b2e79e01d0523f5d8f.tar.bz2
website_creator-627239499c7c9fb5e7af68b2e79e01d0523f5d8f.zip
nested models
-rw-r--r--server/models/Session.js20
-rw-r--r--server/models/User.js19
-rw-r--r--server/routes/user.js5
3 files changed, 32 insertions, 12 deletions
diff --git a/server/models/Session.js b/server/models/Session.js
new file mode 100644
index 0000000..c410bb9
--- /dev/null
+++ b/server/models/Session.js
@@ -0,0 +1,20 @@
+const mongoose = require("mongoose");
+
+const sessionSchema = new mongoose.Schema({
+ user: {
+ type : mongoose.Schema.Types.ObjectId,
+ ref : 'User'
+ },
+ refreshToken: {
+ type: String,
+ required: true
+ },
+ lastAccess: {
+ type: Date,
+ default: Date.now(),
+ index: { expires: 90 }
+ }
+});
+
+module.exports = mongoose.model('Session', sessionSchema);
+
diff --git a/server/models/User.js b/server/models/User.js
index 8cc9c4c..ef3d94e 100644
--- a/server/models/User.js
+++ b/server/models/User.js
@@ -2,6 +2,7 @@ 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: {
@@ -24,24 +25,18 @@ const userSchema = new mongoose.Schema({
min: 4,
max: 1024,
},
- sessions: [{
- ref: {
- type: String,
- required: true
- }
- }]
});
-userSchema.methods.generateJwtToken = async function (currentRef) {
- const ref = currentRef ? currentRef : randtoken.uid(256);
+userSchema.methods.generateJwtToken = async function (currentRefToken) {
+ const refreshToken = currentRefToken ? currentRefToken : randtoken.uid(256);
- if (!currentRef) {
- this.sessions = this.sessions.concat({ ref });
- this.save();
+ if (!currentRefToken) {
+ const session = new Session({ user: this, refreshToken });
+ await session.save();
}
return jwt.sign(
- { _id: this._id.toString(), ref },
+ { _id: this._id.toString(), refreshToken },
process.env.JWT_SECRET,
{ expiresIn: parseInt(process.env.JWT_TOKEN_MAX_AGE) }
);
diff --git a/server/routes/user.js b/server/routes/user.js
index 91bc0f1..f2420ab 100644
--- a/server/routes/user.js
+++ b/server/routes/user.js
@@ -5,6 +5,11 @@ const jwt = require('jsonwebtoken');
router.get('/me', auth, async (req, res) => {
const user = await User.findById(req.userId);
+
+ if (!user) {
+ res.clearCookie('token').redirect('/login');
+ }
+
res.json({ email: user.email });
})