【问题标题】:Error redirect_uri: 'Not a well formed URL.' in discord OAuth2错误 redirect_uri:“不是格式正确的 URL。”在不和谐的 OAuth2 中
【发布时间】:2021-06-30 18:35:55
【问题描述】:

我正在尝试为不和谐做一个 OAuth2,我的代码是这样的:

const express = require('express');
const fetch = require('node-fetch');
const btoa = require('btoa');
const { catchAsync } = require('../utils');
const querystring = require('querystring')

const router = express.Router();

const CLIENT_ID = '801791455034867723';
const CLIENT_SECRET = 'hehe :D, it\'s secret!';
const redirect = encodeURIComponent('http://localhost:50451/api/discord/callback');

router.get('/login', (req, res) => {
    res.redirect(`https://discordapp.com/api/oauth2/authorize?client_id=${CLIENT_ID}&scope=identify&response_type=code&redirect_uri=${redirect}`);
});

router.get('/callback', catchAsync(async (req, res) => {
    if (!req.query.code) throw new Error('NoCodeProvided');
    const code = req.query.code;
    const creds = btoa(`${CLIENT_ID}:${CLIENT_SECRET}`);
    const response = await fetch(`https://discordapp.com/api/oauth2/token`,
        {
            method: 'POST',
            headers: {
                Authorization: `Basic ${creds}`,
                'Content-Type': 'application/x-www-form-urlencoded'
            },
            body: querystring.stringify({
                grant_type: 'authorization_code',
                code: code,
                redirect_uri: redirect
            }),
        }
    );

    const json = await response.json();
    res.redirect(`/?token=${json.access_token}`);
}));

module.exports = router;

每次我在 discord 网站上运行并授予权限时,他都会给出以下错误:{ redirect_uri: [ 'Not a well-formed URL。' ] }。

我哪里做错了?

【问题讨论】:

    标签: javascript oauth-2.0 discord fetch


    【解决方案1】:

    所以你的重定向变量正在使用函数“encodeURIComponent”

    const redirect = encodeURIComponent('http://localhost:50451/api/discord/callback');
    

    尝试使用该回调字符串的变量,但不使用该函数调用

    const redirect2 = 'http://localhost:50451/api/discord/callback'
    

    我实际上和你关注的是同一篇 Medium 文章!我认为它有点过时了,所以发生了错误。

    然后在你的正文中使用redirect2

                body: querystring.stringify({
                  grant_type: 'authorization_code',
                  code: code,
                  redirect_uri: redirect
                }),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 2016-04-08
      • 1970-01-01
      • 2021-01-27
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多