Я работаю с npm disco-oauth (для аутентификации с разногласиями), и когда я аутентифицируюсь в приложении. js (основной файл) я сохраняю userKey в cook ie (используя cook ie -parser), чтобы я мог получить некоторую информацию о пользователе, а также о гильдиях, в которых он находится. Но затем я хочу, чтобы информация об этом пользователе и отфильтрованной гильдии передавалась в файл маршрутов (где я обрабатываю маршруты панели инструментов), и мне нужно чтобы сделать некоторые проверки, и эти переменные будут очень полезны, когда я захочу (я не хочу использовать запросы и другой метод, который использует URL для передачи информации, потому что она не выглядит хорошо).
Проблема в том, что я пытался дать cookieParser объект, подобный этому:
app.get('/auth/discord', (req, res) => {
if (req.cookies.userConfig.userKey) res.redirect('/guilds');
else res.redirect(oauthClient.authCodeLink);
})
app.get('/login', async (req, res) => {
try {
let userKey = await oauthClient.getAccess(req.query.code);
let userConfig = {
userKey: userKey,
userID: " ",
guilds: Guilds[]
}
await res.cookie('userConfig', userConfig);
await res.redirect('/guilds');
} catch (err) {
res.render('error', {
message: err.message,
error: err
});
}
});
app.get('/logout', (req, res) => {
res.clearCookie("userConfig")
res.redirect('/')
})
app.get('/guilds', async (req, res) => {
if (!req.cookies.userConfig.userKey) res.redirect('/');
else {
try {
let user = await oauthClient.getUser(req.cookies.userConfig.userKey);
let GUILDS = await oauthClient.getGuilds(req.cookies.userConfig.userKey)
var Guilds = []
await GUILDS.forEach(async g => {
if (g.permissions.includes("MANAGE_GUILD")) {
await Guilds.push(g)
}
})
//edit the cookie here to import the user and guilds values
await res.render('guilds', {
user, //this is the user I want to pass
Guilds, //This is the guilds I want to pass
Servers: client.guilds.cache,
AdminIDs: keys.admin.discord_ids
});
} catch (err) {
console.log(err)
res.render('error', {
message: err.message,
error: err
});
}
}
})
Дело в том, что новый повар ie obj всегда возвращает "не может прочитать свойство userKey of undefined", но я не понимаю почему это работает, когда я передаю только userKey и когда я пытаюсь поместить полный объект (даже если у него есть только userKey и пустой user и гильдии), он не работает. У повара ie есть какие-то ограничения или я делаю это неправильно? Пожалуйста, помогите
Если эта первая часть не работает, я даже не хочу пытаться редактировать повар ie (см. Комментарий в коде), а затем захватить этот повар ie и использовать его в других файлах. и маршруты
ПОСЛЕДНЯЯ РАБОЧАЯ ВЕРСИЯ
app.get('/auth/discord', (req, res) => {
if (req.cookies.userKey) res.redirect('/guilds');
else res.redirect(oauthClient.authCodeLink);
})
app.get('/login', async (req, res) => {
try {
let userKey = await oauthClient.getAccess(req.query.code);
await res.cookie('userKey', userKey);
await res.redirect('/guilds');
} catch (err) {
res.render('error', {
message: err.message,
error: err
});
}
});
app.get('/logout', (req, res) => {
res.clearCookie("userKey")
res.redirect('/')
})
app.get('/guilds', async (req, res) => {
if (!req.cookies.userKey) res.redirect('/');
else {
try {
let user = await oauthClient.getUser(req.cookies.userKey);
let GUILDS = await oauthClient.getGuilds(req.cookies.userKey)
var Guilds = []
await GUILDS.forEach(async g => {
if (g.permissions.includes("MANAGE_GUILD")) {
await Guilds.push(g)
}
})
await res.render('guilds', {
user,
Guilds,
Servers: client.guilds.cache,
AdminIDs: keys.admin.discord_ids
});
} catch (err) {
console.log(err)
res.render('error', {
message: err.message,
error: err
});
}
}
})