繁体   English   中英

Discord OAUTH2 与 node.js

[英]Discord OAUTH2 with node.js

我需要 discord OAUTH2 登录系统,但我不知道怎么做。 我正在尝试一些事情,但是当我没有登录时它再次显示我“已登录”。

我正在尝试这个,但我不知道该怎么做,如果我没有登录,它会显示我没有登录。

const express = require("express")
const fetch = require('node-fetch')
const { URLSearchParams } = require('url')
const app = express()

var config = {
  "clientId": process.env["CLIENT_ID"],
  "clientSecret": process.env['CLIENT_SECRET'],
  "redirectUri": "redirect uri"
}

app.get("/", (request, response) => {
  response.send("login with discord: <a href='redirect url'>login</a>")
})

app.get("/authorize", (request, response) => {
  var code = request.query["code"]
  var params = new URLSearchParams()
  params.append("client_id", config["clientId"])
  params.append("client_secret", config["clientSecret"])
  params.append("grant_type", "authorization_code")
  params.append("code", code)
  params.append("redirect_uri", config["redirectUri"])
  fetch(`https://discord.com/api/oauth2/token`, {
    method: "POST",
    body: params
  })
  .then(res => res.json())
  .then(json => {
    response.send("logged in")
  })
})

app.listen(80, () => {
  console.log("Listening on :80")
})

通过 POST 调用使用轴。 它让生活更轻松。

#1 在discord 开发者门户设置我的应用程序

在此处输入图像描述

#2 在 discord 开发者门户设置 OAuth2

添加重定向、复制客户端和客户端密码并授予管理员权限(用于测试目的)

![在此处输入图片描述

#3 使用客户端 ID/密码和重定向 URI 保存config.json

它将使用demo.js获取令牌 API 调用。

{
    "CLIENT_ID" : "********** your  Client ID *********",
    "CLIENT_SECRET" : "********** your  Client Secret *********",
    "REDIRECT_URI" : "http://localhost:3000/api/callback" <- this should be matched your REDIRECT_URI of Developer Portal
}

#4 具有demo.js文件名的 Express App Server。

const express = require("express")
const axios = require('axios')
const config = require('./config.json');

const app = express()

app.get("/login", (request, response) => {
    const redirect_url = `https://discord.com/oauth2/authorize?response_type=code&client_id=${config.CLIENT_ID}&scope=identify&state=123456&redirect_uri=${config.REDIRECT_URI}&prompt=consent`
    response.redirect(redirect_url);
})

app.get("/api/callback", async (request, response) => {
    const code = request.query["code"]
    const resp = await axios.post('https://discord.com/api/oauth2/token',
        new URLSearchParams({
            'client_id': config.CLIENT_ID,
            'client_secret': config.CLIENT_SECRET,
            'grant_type': 'authorization_code',
            'redirect_uri': config.REDIRECT_URI,
            'code': code
        }),
        {
            headers:
            {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        })
    response.send('Logged In: ' + JSON.stringify(resp.data));
})

app.listen(3000, () => {
    console.log("Listening on :3000")
})

#5 安装依赖并运行它

$ npm install express axios
$ node demo.js
Listening on :3000

#6 通过 Chrome 访问登录页面

http://localhost:3000/login

它将转发到 discord 登录页面。 如果显示此屏幕,请按`一个 按钮。

在此处输入图像描述

返回呼叫我的快递 URL,然后显示访问令牌和登录消息。

在此处输入图像描述

返回结果为 JSON 格式。

{
    "access_token": "*****************************",
    "expires_in": 604800,
    "refresh_token": "*****************************",
    "scope": "identify",
    "token_type": "Bearer"
}

上面的代码差不多完成了,但是它没有存储用于获取用户信息的授权数据。 您需要向 Discord API 再次请求以获取用户信息。 安装 axios 并添加下面的代码

axios.get("https://discord.com/api/users/@me", make_config(data.access_token)).then(response => {
  res.status(200).send(response.data.username);
 }).catch(err => {
  console.log(err);
  res.sendStatus(500);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM