Javascript 如何使用node.js和mysql同时序列化和反序列化本地登录和facebook登录的用户
我尝试向serializeUser方法添加一个加号参数,如email或facebook_id参数,然后检查:Javascript 如何使用node.js和mysql同时序列化和反序列化本地登录和facebook登录的用户,javascript,mysql,node.js,passport.js,passport-facebook,Javascript,Mysql,Node.js,Passport.js,Passport Facebook,我尝试向serializeUser方法添加一个加号参数,如email或facebook_id参数,然后检查: if (user.id) { done(null, user.id); } else { done(null, user.email); } 但它不起作用 这是我的passport.js文件: module.exports = (passport) => { passport.serializeUser((user, done) => {
if (user.id) {
done(null, user.id);
} else {
done(null, user.email);
}
但它不起作用
这是我的passport.js文件:
module.exports = (passport) => {
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
conn.query("SELECT * FROM user WHERE id = ?", [id], (err, rows) => {
done(err, rows[0]);
});
});
passport.use(
'local-login',
new LocalStrategy({
usernameField: 'login-username',
passwordField: 'login-password',
passReqToCallback: true
},
function (req, username, password, done) {
conn.query("SELECT * FROM user WHERE username = ?", [username], (err, rows) => {
if (err)
return done(err);
if (!rows.length) {
return done(null, false, req.flash('loginMessage', 'No User found!'));
}
if (!bcrypt.compareSync(password, rows[0].password))
return done(null, false, req.flash('loginMessage', 'Wrong Password!'));
return done(null, rows[0]);
})
}
)
);
passport.use(new FacebookStrategy({
clientID: configAuth.facebookAuth.clientID,
clientSecret: configAuth.facebookAuth.clientSecret,
callbackURL: configAuth.facebookAuth.callbackURL
},
function (accessToken, refreshToken, profile, done) {
process.nextTick(function () {
conn.query("SELECT * FROM user WHERE facebook_id = ?", [profile.id], (err, user) => {
if (err)
return done(err);
if (user)
return done(null, user);
else {
let newUser = {
facebook_id: profile.id,
token: accessToken,
email: profile.emails[0].value,
name: profle.name.givenName + ' ' + profile.name.familyName
};
conn.query("INSERT INTO USER (facebook_id, token, email, name) VALUES (?, ?, ?, ?)",
[profile.id, profile.accessToken, profile.emails[0].value, profle.name.givenName + ' ' + profile.name.familyName], (err, rows) => {
if (err)
console.log(err)
return done(null, newUser);
})
}
});
});
}))
};
如果我想用用户名登录本地帐户,它可以工作,但当我想用facebook登录时,我会出现以下错误:
Error: Failed to serialize user into session
有没有办法同时序列化facebook用户和本地用户