Twitch API返回‘Redirect URI与注册URI不匹配’问题求助
解决Twitch API
Parameter redirect_uri does not match registered URI 错误 问题根源
Twitch API要求redirect_uri必须是完整的绝对URL,且与控制台注册的URI完全一致(包括协议、主机、端口和路径)。你代码中使用的是相对路径/auth/twitch/callback,和控制台注册的http://localhost:8888/auth/twitch/callback不匹配,导致验证失败。
解决方案
使用完整绝对URL作为redirect_uri
取消注释代码中${config.TWITCH_CLIENT_REDIR_HOST}部分,拼接出完整的绝对路径,确保和控制台注册的其中一个URI完全一致。确保授权和令牌请求的redirect_uri一致
在/authorize跳转请求和/token令牌请求中,必须使用完全相同的redirect_uri值,不能出现任何差异。严格匹配注册URI
Twitch对redirect_uri的匹配是严格区分的,需检查控制台注册的URI是否有多余斜杠、大小写差异等问题。
修改后的代码示例
const express = require('express'); const axios = require('axios'); const config = require('../config.js'); const router = express.Router(); const authBaseURL = `https://id.twitch.tv/oauth2`; // 拼接完整的绝对URL,确保和控制台注册的URI一致 const redirect_uri = `${config.TWITCH_CLIENT_REDIR_HOST}/auth/twitch/callback`; const authenticationAPI = axios.create({ baseURL: authBaseURL, }); router.get('/', (req, res) => { const qs = new URLSearchParams({ client_id: config.TWITCH_CLIENT_ID, redirect_uri, response_type: 'code', scope: req.query.scope, }); const redirectUrl = `${authBaseURL}/authorize?${qs}`; res.redirect(redirectUrl); }); router.get('/callback', async (req, res) => { const { code, state } = req.query; const qs = new URLSearchParams({ client_id: config.TWITCH_CLIENT_ID, client_secret: config.TWITCH_CLIENT_SECRET, code, grant_type: 'authorization_code', redirect_uri, // 这里必须和授权请求中的redirect_uri完全一致 }); try { const response = await authenticationAPI.post(`/token?${qs}`); res.json({ expires_in: response.data.expires_in, scope: response.data.scope, token_type: response.data.token_type, }); } catch (error) { res.json({ message: error.message, body: error.response.data, }); } }); module.exports = router; // TEST URL - http://localhost:8888/auth/twitch?scope=chat:edit+chat:read+whispers:read
额外验证步骤
- 打印
redirect_uri的值,确认是http://localhost:8888/auth/twitch/callback,和控制台注册的URI完全一致。 - 检查控制台注册的URI是否已正确保存,部分场景下修改后需等待几分钟生效。
内容的提问来源于stack exchange,提问作者SpencerKMedia
相关产品推荐
相关产品推荐

