Javascript 如何使用node.js和mysql同时序列化和反序列化本地登录和facebook登录的用户

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) => {

我尝试向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) => {
        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用户和本地用户