'How do I get the email of the user who is logged in?

my problem is that I want to access to the user who is logged in. All users are saved in a database and then SELECTED into a variable. In the passport-config-js I am checking the login by comparing the email and the hashed password. So I hope you all can help me, I need this for a school project.

severs.js

const express = require('express');
const app = express();
const bcrypt = require('bcrypt');
const passport = require('passport');
const flash = require('express-flash');
const session = require('express-session');
const methodOverride = require('method-override');


const initializePassport = require('./passport-config');
    
initializePassport(
    passport, 
    email =>  users.find(user => user["email"] === email),
    id => users.find(user => user["id"] === id)
)

const users = [];


app.set('view-engine', 'ejs');
app.use(express.urlencoded({extended: false}))
app.use(flash());
app.use(session({
    secret: process.env.SESSION_SECRET,
    resave: false, 
    saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(methodOverride('_method'));
app.use(express.static("public"))

app.get('/' , checkAuthenticated,(req, res) => {
    res.render('startseite.ejs')    
})

app.get('/login', checkNotAuthenticated ,(req, res) =>{
    res.render('login.ejs');
})

app.post('/login', checkNotAuthenticated ,passport.authenticate('local', 
    {
        successRedirect: '/startseite',
        failureRedirect: '/login',
        failureFlash: true
    })
)

app.get('/startseite',checkAuthenticated,(req, res) =>{
    res.render('startseite.ejs', {email: req.body.email});
    console.log(req.body);
})


app.post('/register', checkNotAuthenticated,async (req, res, next) =>{
    try {
        const hashedPassword = await bcrypt.hash(req.body.password, 10);
        let newUser = {
            id: Date.now().toString(),
            name: req.body.name,
            email: req.body.email,
            password: hashedPassword
        }
        if(users.length){
            for(let i = 0; i < users.length; i+
                if(req.body.email === users[i].email){
                    console.log(users[i].email + " email already taken");
                    alert("Email already taken");
                    res.render('/register');
                }
            }
        } 
        let sql = `INSERT INTO Players (email, name, password) VALUES ('${newUser.email}', '${newUser.name}', '${newUser.password}')`;
        connection.query(sql, (err, result) =>{
            if(err) throw err;
            console.log("User with email: " + newUser.email + " inserted")
            allPlayers();
        });
        res.redirect('/login');
    } catch {
        res.redirect('/register');
    }
    //console.log(users);
})

app.delete('/startseite', (req, res) =>{
    req.logOut();
    res.redirect('/login');
})

function checkAuthenticated(req, res, next) {
    if(req.isAuthenticated()){
        return next()
    }
    res.redirect('/login');
}

function checkNotAuthenticated(req, res, next) {
    if(req.isAuthenticated()){
        return res.redirect('/');
    }
    next();
}

function allPlayers(){
    let userList = query("*");
    userList
        .then()
        .then((values) =>{
            let i = 0;
            while(values[i] != null){
                users.push(values[i]);
                i++;
            }
            //console.log(users);
        })
}
allPlayers();

app.listen(3000);

passport-config.js

const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');
const {connection, select, query} = require('./db');

function initialize(passport, getUserByEmail, getUserById){
    const authenticateUser = async (email, password, done) =>{
        const user = getUserByEmail(email);
        if(user == null){
            return done(null, false, {message: 'email or password incorrect'});
        }
        try {
            if(await bcrypt.compare(password, user.password)) {
                return done(null, user);
            } else {
                return done(null, false, {message: 'email or password incorrect'})
            }
        } catch(e) {
            return done(e)
        }
    }
    passport.use(new LocalStrategy({usernameField: 'email'},
    authenticateUser));
    passport.serializeUser((user, done) => done(null, user.id))
    passport.deserializeUser((id, done) => {return done(null, getUserById(id))})
}


module.exports = initialize;


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source