passport.js Error: Failed to serialize user into session
passport.js Error: Failed to serialize user into session
我在这里使用 Nodejs Mongoose 但是当我尝试替换 Callback to promise 它给我一个错误(无法将用户序列化到会话中)我该怎么办?
我正在使用 passport.serializeUser 和 passport.deserializeUser 但它给出了这个错误
const passport = require('passport');
const DiscordStrategy = require('passport-discord');
const User = require('../database/schemas/User');
passport.serializeUser((user, done) => {
done(null, user.discordid)
})
passport.deserializeUser(async (discordId, done) => {
try {
const user = await User.findOne({discordId});
return user ? done(null, user): done(null, null);
} catch (err) {
console.log(err)
done(err, null)
}
});
passport.use(new DiscordStrategy({
clientID: process.env.DASBOARD_CLIENT_ID,
clientSecret: process.env.DASBOARD_CLIENT_SECRET,
callbackUrl: process.env.DASBOARD_CALLBACK_URL,
scope: ['identify','guilds'],
}, async (accessToken, refreshToken, profile, done) => {
const {id, username, discriminator, avatar, guilds} = profile;
try{
const findUser = await User.findOneAndUpdate(
{ discordId: id },
{
discordTag: `${username}#${discriminator}`,
avatar,
guilds,
},
{new: true});
if ( findUser ) {
console.log('++')
return done(null, findUser);
} else {
const newUser = await User.create({
discordId: id,
discordTag: `${username}#${discriminator}`,
avatar,
guilds,
})
return done(null, newUser)
}
} catch(err){
console.log(err);
return done(err, null)
}
})
);
++
Error: Failed to serialize user into session
at pass (C:\Users\pilat\Desktop\makrel beta 2\backend\node_modules\passport\
lib\authenticator.js:281:19)
at serialized (C:\Users\pilat\Desktop\makrel beta 2\backend\node_modules\pas
sport\lib\authenticator.js:286:7)
at C:\Users\pilat\Desktop\makrel beta 2\backend\src\strategies\discord.js:6:
5
at pass (C:\Users\pilat\Desktop\makrel beta 2\backend\node_modules\passport\
lib\authenticator.js:294:9)
at Authenticator.serializeUser (C:\Users\pilat\Desktop\makrel beta 2\backend
\node_modules\passport\lib\authenticator.js:299:5)
at SessionManager.logIn (C:\Users\pilat\Desktop\makrel beta 2\backend\node_m
odules\passport\lib\sessionmanager.js:14:8)
at IncomingMessage.req.login.req.logIn (C:\Users\pilat\Desktop\makrel beta 2
\backend\node_modules\passport\lib\http\request.js:50:33)
at Strategy.strategy.success (C:\Users\pilat\Desktop\makrel beta 2\backend\n
ode_modules\passport\lib\middleware\authenticate.js:253:13)
at verified (C:\Users\pilat\Desktop\makrel beta 2\backend\node_modules\passp
ort-oauth2\lib\strategy.js:186:20)
at Strategy._verify (C:\Users\pilat\Desktop\makrel beta 2\backend\src\strate
gies\discord.js:37:20)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
这是给控制台的错误。我该怎么办?
根据这里https://mongoosejs.com/docs/promises.html#built-in-promises
如果您要使用 async/await
,您需要添加 .exec()
const user = await User.findOne({discordId}).exec();
const findUser = await User.findOneAndUpdate(
{ discordId: id },
{
discordTag: `${username}#${discriminator}`,
avatar,
guilds,
},
{new: true}).exec();
const newUser = await User.create({
discordId: id,
discordTag: `${username}#${discriminator}`,
avatar,
guilds,
}).exec();
我在这里使用 Nodejs Mongoose 但是当我尝试替换 Callback to promise 它给我一个错误(无法将用户序列化到会话中)我该怎么办?
我正在使用 passport.serializeUser 和 passport.deserializeUser 但它给出了这个错误
const passport = require('passport');
const DiscordStrategy = require('passport-discord');
const User = require('../database/schemas/User');
passport.serializeUser((user, done) => {
done(null, user.discordid)
})
passport.deserializeUser(async (discordId, done) => {
try {
const user = await User.findOne({discordId});
return user ? done(null, user): done(null, null);
} catch (err) {
console.log(err)
done(err, null)
}
});
passport.use(new DiscordStrategy({
clientID: process.env.DASBOARD_CLIENT_ID,
clientSecret: process.env.DASBOARD_CLIENT_SECRET,
callbackUrl: process.env.DASBOARD_CALLBACK_URL,
scope: ['identify','guilds'],
}, async (accessToken, refreshToken, profile, done) => {
const {id, username, discriminator, avatar, guilds} = profile;
try{
const findUser = await User.findOneAndUpdate(
{ discordId: id },
{
discordTag: `${username}#${discriminator}`,
avatar,
guilds,
},
{new: true});
if ( findUser ) {
console.log('++')
return done(null, findUser);
} else {
const newUser = await User.create({
discordId: id,
discordTag: `${username}#${discriminator}`,
avatar,
guilds,
})
return done(null, newUser)
}
} catch(err){
console.log(err);
return done(err, null)
}
})
);
++
Error: Failed to serialize user into session
at pass (C:\Users\pilat\Desktop\makrel beta 2\backend\node_modules\passport\
lib\authenticator.js:281:19)
at serialized (C:\Users\pilat\Desktop\makrel beta 2\backend\node_modules\pas
sport\lib\authenticator.js:286:7)
at C:\Users\pilat\Desktop\makrel beta 2\backend\src\strategies\discord.js:6:
5
at pass (C:\Users\pilat\Desktop\makrel beta 2\backend\node_modules\passport\
lib\authenticator.js:294:9)
at Authenticator.serializeUser (C:\Users\pilat\Desktop\makrel beta 2\backend
\node_modules\passport\lib\authenticator.js:299:5)
at SessionManager.logIn (C:\Users\pilat\Desktop\makrel beta 2\backend\node_m
odules\passport\lib\sessionmanager.js:14:8)
at IncomingMessage.req.login.req.logIn (C:\Users\pilat\Desktop\makrel beta 2
\backend\node_modules\passport\lib\http\request.js:50:33)
at Strategy.strategy.success (C:\Users\pilat\Desktop\makrel beta 2\backend\n
ode_modules\passport\lib\middleware\authenticate.js:253:13)
at verified (C:\Users\pilat\Desktop\makrel beta 2\backend\node_modules\passp
ort-oauth2\lib\strategy.js:186:20)
at Strategy._verify (C:\Users\pilat\Desktop\makrel beta 2\backend\src\strate
gies\discord.js:37:20)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
这是给控制台的错误。我该怎么办?
根据这里https://mongoosejs.com/docs/promises.html#built-in-promises
如果您要使用 async/await
,您需要添加 .exec()
const user = await User.findOne({discordId}).exec();
const findUser = await User.findOneAndUpdate(
{ discordId: id },
{
discordTag: `${username}#${discriminator}`,
avatar,
guilds,
},
{new: true}).exec();
const newUser = await User.create({
discordId: id,
discordTag: `${username}#${discriminator}`,
avatar,
guilds,
}).exec();