Node.js 如何从管理员帐户切换到其他用户帐户
我有一个用户表,其中有一个管理员帐户和一些其他普通用户帐户 我想为特定用户执行所有活动。它的行为应该类似于由同一用户完成的活动 有人能告诉我如何从管理员帐户切换到另一个帐户吗 没有登录到该帐户 目前我使用passport身份验证。(passport local) 这是我的密码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
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){});
});