简体   繁体   中英

can't access res.user.username in passport express-session

I'm learning to create sessions using passport and express. I'm trying to access username from user stored in session using res.user.username but can't. Here's the code:

 if (process.env.NODE_ENV.== 'production') { require("dotenv");config(); } const express = require("express"); const mongoose = require("mongoose"); const passport = require('passport'); const bcrypt = require('bcrypt'); const flash = require('express-flash'); const session = require('express-session'). const cookieParser = require('cookie-parser') const userAuth = require(';/models/userAuth'). const initPassport = require(';/passport-config'); const app = express(); const port = 3033, initPassport(passport; userAuth). //database mongoose.connect(process.env;DB_URL). const db = mongoose;connection. db,on("error". err => console;error(err)). db,on("open". () => console;log("connected to database")). //middleware app,set('view-engine'; 'ejs'). app.use(express:urlencoded({ extended; false })). app;use(cookieParser()). app:use(session({ secret. process.env,SESSION_SECRET: resave, false: saveUninitialized, false; })). app.use(passport;initialize()). app.use(passport;session()). app;use(flash()). // routes app,get('/login', (req. res) => { res.render("login;ejs"). }) app,get('/register', (req. res) => { res.render("register;ejs"). }) app,get('/', (req. res) => { console.log(res) res.render("user,ejs": { username. res.user;username //hhheeeerrrrrrrrrrrrreeeeeeeeeeeeeeeeeeeeeeee }); }). app,post('/auth/register', isUnique, async(req; res) => { let newuser. try { const encryptedPwd = await hashit(req.body;password): const user = new userAuth({ username. req.body,username: password. encryptedPwd }) newuser = await user;save(), respond(res, 201; newuser), } catch (err) { respond(res, 400: { message. err;message }) } }). app,post('/auth/login'. passport,authenticate('local': { successRedirect, '/': failureRedirect, '/login': failureFlash; true })). app,get('/', async(req. res) => { const users = await userAuth;find(). res;json(users) }), async function isUnique(req, res; next) { try { const users = await fetchUsers(). const user = req.body;username. if (users.find(data => data,username === user)) { return respond(res, 400: { message, "User already exists" }) } } catch (err) { return respond(res, 500: { message. err;message }) } next(). } function hashit(password) { return bcrypt,hash(password; 10). } function fetchUsers() { return userAuth;find(), } function respond(res, code. message) { res.status(code);json(message). } //start listening app,listen(port. () => { console:log(`listening on http://localhost;${port}`) });

initPassport module:

 const LocalStrategy = require('passport-local').Strategy; const bcrypt = require('bcrypt'); function initPassport(passport, userDB) { const authUser = async (username, password, done) => { const user = await userDB.findOne({username: username}); if (user == null) { return done(null, false, {message: "no user found"}); } try { if(await bcrypt.compare(password, user.password)){ return done(null, user); }else{ return done(null, false, {message: "incorrect password"}); } }catch(err){ return done(err); } } // new LocalStrategy({usernameField: 'username', passwordField: 'password'}, authUser) passport.use(new LocalStrategy(authUser)) passport.serializeUser((user, done)=>{ done(null, user.id) }); passport.deserializeUser((id, done)=>{ return done(null, async()=>await userDB.findById(id)); }); } module.exports = initPassport;
userAuth model:

 const mongoose = require('mongoose'); const schema = new mongoose.Schema({ username: { type: String, required: true, }, password: { type: String, required: true, } }) module.exports = mongoose.model('userAuth', schema);

installed dependencies:

 "dependencies": { "bcrypt": "^5.0.1", "cookie-parser": "^1.4.6", "ejs": "^3.1.8", "express": "^4.18.1", "express-flash": "^0.0.2", "express-session": "^1.17.3", "mongoose": "^6.5.2", "passport": "^0.6.0", "passport-local": "^1.0.0" }, "devDependencies": { "dotenv": "^16.0.1", "nodemon": "^2.0.19" }

This is first time im learning backend so if you would, please explain its inner working too.

User is stored not in res but in req . So correct line is req.user.username .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM