javascript - 网站不允许我们大约一半的用户登录。饼干问题。Ubuntu
问题描述
所以说实话,我不确定我可以在这里分享多少。我看到了一个在用户端解决的类似帖子,但实际上并没有导致我的解决方案。如果有人想要该网站进行测试,请告诉我,或者如果我可以将其发布在这里简单,我也会。
就这样吧。我无法亲自复制这个问题,这使得测试变得困难,而且我已经超出了我的深度。我看过其他人的问题,这就是我们走到这一步的方式。
我们运行一个不和谐社区,并使用来自不和谐的身份验证从我们的成员那里提取数据并将其用于网站上的功能。
话虽如此 - 这里没有角色是问题。我们已将问题缩减为 cookie。该网站会创建一个 cookie,该 cookie 在 Auth 重定向期间消失,然后返回并阻止人们加载该网站。给出 504 网关错误。一旦我让用户删除 cookie,他们就可以再次加载网站 - 但是他们没有登录。
在过去的一周里,我们一直在用多堵墙敲打我们的头,我们不能把它弄下来。
我将在这里提供一些代码 - 希望这会显示一些问题,但我想它不会。请让我知道我是否可以提供更清晰的信息。
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;
解决方案
好的,伙计们-所以我只是想向您介绍发生的事情。我感谢您的帮助,并为浪费时间感到抱歉。
我们的一位程序员说得最好:“吸取教训。永远不要硬编码值。”
对于 Discord 的成员角色回调之一。我们在 Discord 会员 ID 中进行了硬编码。这导致了一个错误,由于某种原因我们仍然不明白,我们中的一半能够进入,一半能够退出......
我们将该 ID 更改为 .env 文件,我们可以在 Pipeline 和 Boom 上处理该文件。人在。
谢谢您的帮助!
推荐阅读
- java - 为什么我只能以这种方式初始化?
- mysql - 我可以在没有外部包或一个通用包的情况下使用 Node.JS 连接到 SQL 吗?
- ssl - 如何知道 SSL 是否在应用程序级别的 HAProxy 级别建立?
- graphql - 根据书籍 author_id 获取作者数据
- wordpress - 在付款屏幕上更改产品价格
- api - 使用已知算法下载 OEIS 序列以生成它们
- c# - 如何使用 DependencyService 和接口委托将 xamarin.android 特定功能的方法传递给 xamarin.forms?
- java - 测试失败时不拍摄倾城报告截图
- javascript - 将javascript函数中的javascript变量传递给PHP
- java - 使用 Q 键关闭 JFrame