javascript - 错误 redirect_uri:“不是格式正确的 URL。” 在不和谐的 OAuth2 中
问题描述
我正在尝试为不和谐做一个 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;
每次我在不和谐网站上运行并给予许可时,他都会给出这个错误:{redirect_uri:['不是格式正确的 URL。' ] }。
我哪里做错了?
解决方案
所以你的重定向变量正在使用函数“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
}),
推荐阅读
- html - 下拉菜单不在按钮下方居中的 HTML/CSS 问题
- ethereum - 无法在孟买测试中部署 ERC 720 代币表示资金不足
- python - 为什么我的线程只执行一次而不是定期调用?
- python - 使用 statsmodel 为模型添加稳健性
- java - 类 java.math.BigInteger 不能转换为类 java.lang.Integer(java.math.BigInteger 和 java.lang.Integer 在模块 java.base 中的负载
- python - numpy中分段线性函数的总变化实现
- regex - /dev/urandom 为 Windows 10 复杂性要求生成密码
- minio - 简单的 Minio 存储桶策略
- visual-studio-code - 你如何安装Eigen?
- python - ValueError:无法将字符串转换为浮点数:'2021-08-22 19:30:00+01:00'