Node.js 如何从管理员帐户切换到其他用户帐户

Node.js 如何从管理员帐户切换到其他用户帐户,node.js,passport.js,passport-local,Node.js,Passport.js,Passport Local,我有一个用户表,其中有一个管理员帐户和一些其他普通用户帐户 我想为特定用户执行所有活动。它的行为应该类似于由同一用户完成的活动 有人能告诉我如何从管理员帐户切换到另一个帐户吗 没有登录到该帐户 目前我使用passport身份验证。(passport local) 这是我的密码 app.get('/secure/group/login', function(req,res,next) { passport.authenticate('local',function(err,user

我有一个用户表,其中有一个管理员帐户和一些其他普通用户帐户

我想为特定用户执行所有活动。它的行为应该类似于由同一用户完成的活动

有人能告诉我如何从管理员帐户切换到另一个帐户吗 没有登录到该帐户

目前我使用passport身份验证。(passport local)

这是我的密码

app.get('/secure/group/login', function(req,res,next) {
        passport.authenticate('local',function(err,user,info) {
            console.log("error is "+err);
            req.logIn('tessAccount',function(err) {
                    console.log("Weer" +err);

            });
            console.log("dd");

        })(req,res,next);
    });

    });
护照号码

var LocalStrategy = require('passport-local').Strategy;

module.exports = function(passport) {
    // used to serialize the user for the session
    passport.serializeUser(function(user, done) {
        done(null, user.token);
    });


passport.use(new BearerStrategy(
  function(token, done) {
      user.tokenExist(token, function(err, user) {
                if (err) {
                    return done(err);
                }
                 else {
                    return done(null, user, { scope: 'all' });
                }
      });
  }
));
    // used to deserialize the user
    passport.deserializeUser(function(accessToken, done) {
        user.getUserByAccessToken(accessToken, function(err, dbUser) {
            if (err) {
                done(err);
            } else {
                done(null, dbUser[0]);
            }
        });
    });

    // we are using named strategies since we have one for login and one for signup
    // by default, if there was no name, it would just be called 'local'
    passport.use('local-signup', new LocalStrategy({
            // by default, local strategy uses username and password, we will override with email
            usernameField: 'email',
            passwordField: 'password',
            passReqToCallback: true // allows us to pass back the entire request to the callback
        },
        function(req, email, password, done) {
            user.emailExists(email, function(err, exists) {
                if (err)
                    return done(err);
                else if (exists) {
                    return done(null, false, {
                        message: req.flash('loginMessage')
                    });
                } else {
                    req.userDetails.status = 0;
                    req.userDetails.token = md5.digest_s(req.userDetails.email + new Date());
                    req.userDetails.userImage = config.user.image;

                    user.register(req.userDetails, function(err, newUser) {
                        if (err)
                            return done(err);
                        else {
                            /*Get user Shared article if exist start*/
                            getSharedArticlesOfnewlyuserIfExist(email, newUser.insertId);
                            /*Get user Shared article if exist end*/

                            req.userDetails.id = newUser.insertId;
                            return done(err, req.userDetails);
                        }
                    });
                }
            });
        }));

    passport.use('local-login', new LocalStrategy({
            // by default, local strategy uses username and password, we will override with email
            usernameField: 'email',
            passwordField: 'password',
            passReqToCallback: true // allows us to pass back the entire request to the callback
        },
        function(req, email, password, done) {

            // callback with email and password from our form
            // find a user whose email is the same as the forms email
            // we are checking to see if the user trying to login already exists
            user.matchPassword({
                email: email,
                password: password
            }, function(err, newUser) {
                // if there are any errors, return the error before anything else
                if (err)
                    return done(err);

                // if no user is found, return the message
                if (newUser.length > 0) {
                    var user = {
                        id: newUser[0].user_id,
                        email: newUser[0].email_id,
                        token: newUser[0].user_access_token
                    };
                    return done(null, user);
                } else {
                    return done(null, false, {
                        message: 'Incorrect username or password.'
                    }); // req.flash is the way to set flashdata using connect-flash
                }

            });

        }));
这让我不用密码就可以登录到一个帐户,它可以从我的管理员帐户切换到用户帐户


实际上,我正在使用passport.js和mongoose

我收到了这个错误[错误:无法将用户序列化到会话]您是否实现了
passport.serializeUser(函数(user,done){done(null,user);});反序列化用户(函数(user,done){done(null,user);})?是的,我添加了这个。我添加了一些代码。我从来没有在mysql中使用passport,但我认为您应该尝试将
req.logIn('tessAccount',function(err){console.log(“Weer”+err);
替换为
req.logIn(user,function(err){console.log(“Weer”+err);
因为您将字符串与req.user而不是对象关联
User.findOne({ username: 'Myusername' }, function(err, user) {
    req.logIn(user, function(err){});
});