简体   繁体   English

passport.js req.user 未定义

[英]passport.js req.user is undefined

I'm building a nodejs app with express and using passport for authentication.我正在使用 express 构建一个 nodejs 应用程序并使用护照进行身份验证。 I'm a relative beginner to the platform having only worked with it for 3 weeks.我是该平台的相对初学者,只使用了 3 周。 I'm running into problems as my server does not save the user information.我遇到了问题,因为我的服务器不保存用户信息。

I can login correctly using MongoDB as my database source.我可以使用 MongoDB 作为我的数据库源正确登录。 The information is fetched correctly from the database, and it appears to validate correctly with passport.该信息是从数据库中正确获取的,并且似乎可以通过护照正确验证。 However, the information does not persist and req.user is undefined upon redirect.但是,信息不会持续存在,并且 req.user 在重定向时未定义。

I've tried for hours reordering middleware having searched other questions and answers but nothing seems to be working.我已经尝试了几个小时重新排序中间件并搜索了其他问题和答案,但似乎没有任何效果。 I really don't know what's wrong.我真的不知道怎么了。

app.js `应用程序.js `

const express = require('express');
const app = express();
app.use(express.static(__dirname + '/public'));
app.set('views', __dirname + '/views');
const http = require('http').Server(app);
const cookieParser = require('cookie-parser');
const session = require('express-session');
const flash = require('connect-flash');
const passport = require('passport');
const io = require('socket.io')(http);
const mongo = require('./controllers/mongo');
var ObjectID = require('mongodb').ObjectID;


app.use(express.urlencoded({extended : false}));
app.set('view engine', 'ejs');
app.use(require('express-useragent').express());



app.use(cookieParser());
app.use(session({
    secret : 'secret',
    resave : true,
    saveUninitialized : true
}));
app.use(flash());
app.use((req,res,next)=> {
    res.locals.success_msg = req.flash('success_msg');
    res.locals.error_msg = req.flash('error_msg');
    res.locals.error  = req.flash('error');
    next();
})
    
app.use(passport.initialize());
app.use(passport.session());
    



//router
const router = express.Router();

async function start_app() {
    await mongo.init();
    require("./controllers/passport")(passport);
    require("./controllers/gameio")(io);

    
    
    app.use('/forums', require('./routes/forums'));
    app.use('/user', require('./routes/users'));
    app.use('/tournaments', require('./routes/tournaments'));
    app.use('/members', require('./routes/memberlist'));
    app.use('/profile', require('./routes/profile'));
    app.use('/lobby', require('./routes/lobby'));
    app.use('/game', require('./routes/game'));
    app.use('/watch', require('./routes/watch'));

}
start_app();


const server = http.listen(8080, function() {
    console.log('listening on *:8080');
});
module.exports = router;

` `

passport configuration `护照配置`

const express = require('express');
const router = express.Router();
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');
const { dbo } = require('../controllers/mongo');

module.exports = function(passport) {
    passport.use(
        new LocalStrategy({usernameField : 'email'},async function(email,password,done) {
            //match user
            await dbo.getUser({userEmail : email})
                .then((user)=>{
                if(!user) {
                   return done(null,false,{message : 'that email is not registered'});
                }
                
                console.log(user); // returns the relevant chunk of the user table fetched
                
                //match pass
                bcrypt.compare(password,user.userPassword,(err,isMatch)=>{
                    if(err) throw err;

                    if(isMatch) {
                        return done(null,user);
                    } else {
                        return done(null,false,{message : 'pass incorrect'});
                    }
                })
            })
            .catch((err)=> {console.log(err)})
        })
        
    )
    passport.serializeUser(function(user, done) {
        console.log(user); // returns the relevant chunk of the user table fetched
        
        done(null, user);
    });
      
    passport.deserializeUser(function(id, done) {
        done(null, null);
    }); 
}; 
`

user login page `用户登录页面`

router.post('/login',(req,res,next)=>{
passport.authenticate('local',{
        successRedirect : '/forums',
        failureRedirect : '/user/login',
        failureFlash : true,
    })(req,res,next);
 })

` `

serializeUser determines which data of the user object should be stored in the session and deserializeUser The first argument of deserializeUser corresponds to the key of the user object that was given to the done function, so do like this: serializeUser determines which data of the user object should be stored in the session and deserializeUser The first argument of deserializeUser corresponds to the key of the user object that was given to the done function, so do like this:

passport.serializeUser(function(user, done) {
    done(null, user.id);
  });
  
  passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
      done(err, user);
    });
  });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 req.user未定义Express.js Passport.js - req.user is undefined Express.js Passport.js 使用快递服务器,passport.js进行Twitter身份验证后,req.user未定义 - req.user undefined after twitter authentication using express sever, passport.js 服务器端文件更改后,未定义Passport.js req.user对象(节点,快速) - Passport.js req.user object is undefined after server side file changes (node, express) 无法使用Passport.js和Express 4访问req.user - Unable to access req.user with Passport.js and Express 4 Passport.js、会话和反应 | 从 /login 路由以外的任何路由访问 req.user 是未定义的 - Passport.js, Sessions, & React | Accessing req.user from any route other than the /login route is undefined 如何告诉 Passport JS 中的 typescript req.user 永远不会未定义? - How to tell typescript req.user in Passport JS never will be undefined? 无法在Express.js上的Passport.js中访问req.user - Unable to access req.user in Passport.js on Express.js passport.js req.user 正在返回:'Promise { false }' - 如何获取当前会话的用户名? - passport.js req.user is returning: 'Promise { false }' - How do I get the current sessions' username? 护照当地猫鼬req.user未定义 - passport local mongoose req.user undefined req.session.passport为空:req.user未定义 - req.session.passport is empty: req.user undefined
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM