Register, Login, and Logout
This commit is contained in:
+63
@@ -0,0 +1,63 @@
|
||||
const { generateToken } = require('./csrf');
|
||||
const database = require('./database');
|
||||
const crypto = require("crypto");
|
||||
|
||||
async function PersistSession(req, res, next) {
|
||||
req.session.visited = true;
|
||||
res.locals.nonce = crypto.randomBytes(16).toString('base64');
|
||||
|
||||
const isLoggedIn = req.session.isLoggedIn;
|
||||
|
||||
if(isLoggedIn) {
|
||||
const userId = req.session.userId;
|
||||
const username = req.session.username;
|
||||
const power = req.session.power;
|
||||
|
||||
req.session.ipAddress = req.ip;
|
||||
|
||||
res.locals.isLoggedIn = isLoggedIn;
|
||||
res.locals.userId = userId;
|
||||
res.locals.username = username;
|
||||
res.locals.power = power;
|
||||
res.locals.csrfToken = generateToken(req);
|
||||
}
|
||||
|
||||
next();
|
||||
}
|
||||
|
||||
async function CreateSession(req, user) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
req.session.isLoggedIn = true;
|
||||
req.session.userId = user.id;
|
||||
req.session.username = user.username;
|
||||
req.session.power = user.power;
|
||||
|
||||
resolve();
|
||||
} catch(error) {
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function AllowIfNotAuthenticated(req, res, next) {
|
||||
const isLoggedIn = req.session.isLoggedIn;
|
||||
if(isLoggedIn)
|
||||
return res.redirect('/');
|
||||
next();
|
||||
}
|
||||
|
||||
function AllowIfAuthenticated(req, res, next) {
|
||||
const isLoggedIn = req.session.isLoggedIn;
|
||||
if(!isLoggedIn)
|
||||
return res.redirect('/');
|
||||
else
|
||||
next();
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
PersistSession,
|
||||
CreateSession,
|
||||
AllowIfNotAuthenticated,
|
||||
AllowIfAuthenticated
|
||||
}
|
||||
Reference in New Issue
Block a user