You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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不匹配,导致验证失败。

解决方案

  1. 使用完整绝对URL作为redirect_uri
    取消注释代码中${config.TWITCH_CLIENT_REDIR_HOST}部分,拼接出完整的绝对路径,确保和控制台注册的其中一个URI完全一致。

  2. 确保授权和令牌请求的redirect_uri一致
    在/authorize跳转请求和/token令牌请求中,必须使用完全相同的redirect_uri值,不能出现任何差异。

  3. 严格匹配注册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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:15:46