Веб-сайт не позволяет примерно половине наших пользователей войти в систему. Проблема с файлами cookie. Ubuntu - PullRequest
3 голосов
/ 18 июня 2020

Так что, честно говоря, я не уверен, чем могу здесь поделиться. Я видел похожий пост, который был решен на стороне пользователей и на самом деле не привел к решению на моем. Если кому-то нужен веб-сайт для тестирования, дайте мне знать, или, если я могу разместить его здесь, чтобы быть простым, я тоже.

Итак, поехали. Я не могу лично воспроизвести проблему, что затрудняет тестирование, и я не в своей глубине как есть. Я наблюдал за другими с этой проблемой, и вот как мы зашли так далеко.

Мы управляем сообществом 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;

1 Ответ

0 голосов
/ 19 июня 2020

Хорошо, ребята, поэтому я просто хотел рассказать вам, что произошло. Я благодарен за помощь и извиняюсь за потраченное время.

Один из наших программистов сказал это лучше всего: «Урок извлечен. Никогда не кодируйте значения жестко».

Для одного из обратных вызовов Discord для ролей участников. Мы жестко запрограммировали идентификатор участника Discord. Это привело к ошибке, и по какой-то причине мы все еще не понимаем, половина из нас может войти, а половина - выйти ...

Мы изменили этот идентификатор на файл .env, который мы можем обработать в конвейере и бум. Люди есть.

Спасибо за помощь!

...