#javascript #node.js #express #oauth-2.0 #avatar
#javascript #node.js #выражать #oauth-2.0 #аватар
Вопрос:
Я спрашиваю, как я могу получить аватар пользователя, который авторизовался с помощью OAuth2.
https://cdn.discordapp.com/avatars/781264468998488095/ XXXXXXXXXXXXXXXXXXX ?size=128
Первый — это идентификатор клиента, не мог бы кто-нибудь объяснить, что может скрываться за «/»?
Ответ №1:
Информация, предоставляемая вам в ответе Discord OAuth2, включает идентификатор аватара:
{id: ‘537355342313422849’, имя пользователя: ‘Зрелище’, аватар: ‘1ee4375beb131ae43a4e4b81e267a265’, дискриминатор: ‘1738’, public_flags: 64, …}
Это то, что идет в URL после идентификатора клиента.
Пример:
https://cdn.discordapp.com/avatars/537355342313422849/1ee4375beb131ae43a4e4b81e267a265
И, конечно, вы можете добавить спецификации для размера.
Ответ №2:
const { get, post } = require("snekfetch");
const express = require("express");
const btoa = require("btoa");
const app = express();
const cfg = {
id: "****",
secret: "*****",
};
app.get("/", (req, res) => {
console.log(req.query.code);
res.status(200).json({ status: "ok" });
get(`https://discord.com/users/{id}`)
.then((response) => {
console.log(response);
res.send(response);
})
.catch(console.error);
});
app.get("/dc", (req, res) => {
res.redirect(
[
"https://discordapp.com/oauth2/authorize",
`?client_id=${cfg.id}`,
"amp;scope=identify guilds",
"amp;response_type=code",
`amp;callback_uri=http://localhost:8080/authorize`,
].join("")
);
});
app.get("/authorize", (req, res) => {
const code = req.query.code;
const cred = btoa(`${cfg.id}:${cfg.secret}`);
post(
`https://discordapp.com/api/oauth2/token?grant_type=authorization_codeamp;code=${code}`
)
.set("Authorization", `Basic ${cred}`)
.then((response) =>
res.redirect(`/guilds?token=${response.body.access_token}`)
)
.catch(console.error);
});
app.get("/guilds", (req, res) => {
get("https://discordapp.com/api/v6/users/@me/guilds")
.set("Authorization", `Bearer ${req.query.token}`)
.then((response) => res.json(response.body))
.catch(console.error);
});
app.listen(8080, () => console.log("Ready"));