Так что, честно говоря, я не уверен, чем могу здесь поделиться. Я видел похожий пост, который был решен на стороне пользователей и на самом деле не привел к решению на моем. Если кому-то нужен веб-сайт для тестирования, дайте мне знать, или, если я могу разместить его здесь, чтобы быть простым, я тоже.
Итак, поехали. Я не могу лично воспроизвести проблему, что затрудняет тестирование, и я не в своей глубине как есть. Я наблюдал за другими с этой проблемой, и вот как мы зашли так далеко.
Мы управляем сообществом Discord и используем Auth из Discord, чтобы получать данные от наших участников и использовать их для функций на сайте.
При этом - никаких ролей здесь нет. Мы свели проблему к повару ie. Веб-сайт создает повар ie, который уходит во время перенаправления Auth, затем возвращается и не позволяет людям загружать сайт. Выдает ошибку шлюза 504. Как только я заставлю пользователей удалить повар ie, они смогут снова загрузить веб-сайт, однако они не вошли в систему.
Мы бились головами о несколько стен в течение прошлой недели, и мы не можем получить это вниз.
Я приведу здесь некоторый код - надеюсь, это покажет некоторую проблему, но я думаю, что это не так. Пожалуйста, дайте мне знать, если я могу внести дополнительную ясность.
const r = require('express').Router();
const fetch = require('node-fetch');
const btoa = require('btoa');
const FormData = require("form-data");
const { catchAsync } = require('./utils/utils.js');
const session = require('express-session');
const redir = encodeURIComponent(process.env.DISCORDCALLBACK)
r.get("/login", (req, res) => {
res.redirect(`https://discord.com/api/v6/oauth2/authorize?client_id=${process.env.CID}&response_type=code&scope=identify%20email`);
});
r.get("/logout", (req, res) => {
if(req.session.accessToken.length > 1) {
req.session.accessToken = "";
res.redirect("/");
} else {
res.redirect("/");
}
})
r.get("/callback", catchAsync(async (req, res) => {
if (!req.query.code) throw new Error("NoCodeProvided");
const code = req.query.code;
//const creds = btoa(`${process.env.CID}:${process.env.SECRET}`);
const data = new FormData()
data.append("client_id", process.env.CID);
data.append("client_secret", process.env.SECRET);
data.append("grant_type", "authorization_code");
data.append("code", code);
fetch(`https://discord.com/api/v6/oauth2/token`, {
method: "POST",
//headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: data
})
.then(res => res.json())
.then(json => {
fetch("http://discord.com/api/v6/users/@me", {
method: "POST",
headers: { "Authorization": `${json.token_type} ${json.access_token}` }
})
.then(res => res.json())
.then(user => {
req.session.accessToken = `${json.access_token}`
req.session.cookie.maxAge = 86400000;
req.session.save(err => {
if(err) return console.log(err)
res.redirect("/");
})
})
.catch(err => {
console.log(err)
})
})
.catch(err => {
console.log(err)
})
}));
//export route(s)
module.exports = r;