已加入白名单的Spotify URI仍返回invalid_grant(重定向URI无效)错误
invalid_grant(Invalid redirect URI)错误 我完全懂你这种被千篇一律的“加斜杠”答案绕得头大的感受——明明照着试了,问题还是卡着,太闹心了。针对你遇到的这个问题,咱们从几个容易被忽略的细节入手排查:
重定向URI必须100%完全匹配
Spotify对重定向URI的匹配要求到了“苛刻”的程度:大小写(比如/Test和/test)、端口号、路径里的每一个字符都必须和你在Spotify开发者后台应用设置里的“Redirect URIs”列表里的条目完全一致。先去后台仔细核对一遍,哪怕是多一个空格或者少一个斜杠都不行。禁止对
redirect_uri做URL编码
你代码里注释掉encodeURIComponent的版本是对的!Spotify的token接口要求redirect_uri传入原始字符串,编码后的URI会被判定为不匹配,所以保持当前redirect_uri: 'http://localhost:3000/Test'的写法就好。检查授权码(
code)的有效性invalid_grant错误不一定只和URI有关——授权码只能使用一次,而且有效期只有10分钟左右。如果你的code是之前生成的旧码,或者已经用过一次,就会触发这个错误。建议重新走一遍授权流程,获取全新的授权码再尝试请求token。确保请求的Content-Type正确
用superagent发送请求时,必须设置Content-Type为application/x-www-form-urlencoded,因为Spotify的token接口只接受表单格式的请求体。如果用JSON格式发送,会导致接口无法正确解析参数,间接引发URI相关的错误。可以在请求里加上.type('form'):const request = require('superagent'); const data = { grant_type: 'authorization_code', code: '你的新授权码', redirect_uri: 'http://localhost:3000/Test' }; request.post('https://accounts.spotify.com/api/token') .type('form') .send(data) .then(response => { console.log('获取到的token:', response.body); }) .catch(err => { console.error('错误:', err.response.body); });核对应用的授权范围(Scopes)
虽然这和URI错误提示没有直接关联,但如果授权时请求的scopes和你后台设置的不一致,也可能间接导致invalid_grant。确认一下授权流程中请求的scopes和应用后台的配置匹配。
先从核对后台重定向URI和更换新授权码这两点入手,大概率能解决问题。
内容的提问来源于stack exchange,提问作者let_the_coding_begin

