0

我正在尝试使用 oauth 针对 Reddit 帐户对我的第三方应用程序进行身份验证。

我首先到达了这个端点

让授权网址 = https://www.reddit.com/api/v1/authorize?client_id=${redditClientId}&response_type=code&state=${state}&redirect_uri=${oAuthCallbackURL}&duration=permanent&scope=${scopes};

然后我收到了一个代码到我的回调 url

然后我像这样点击下一个端点:

    let accessTokenUrl = `https://www.reddit.com/api/v1/access_token`;
    let accessTokenRequest = new URLSearchParams();
    accessTokenRequest.append("grant_type", "authorization_code");
    accessTokenRequest.append("code", code);
    accessTokenRequest.append("redirect_uri", oAuthCallbackURL);

    let redditClientId = process.env.REDDIT_CLIENT_ID;
    let redditSecret = process.env.REDDIT_SECRET;
    const clientIdAndSecretBase64 = 
    Buffer.from(`${redditClientId}:${redditSecret}`).toString('base64');
    try {
        let authorizationCodeResponse = await axios.post(accessTokenUrl, accessTokenRequest, {
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Authorization': `Basic ${clientIdAndSecretBase64}`
            }
        });
        let { data } = authorizationCodeResponse;
        console.log(authorizationCodeResponse);
        console.log(`Reddit OAUTH Response=${JSON.stringify(data, null, 2)}`);
    } catch (e) {
        console.log(e);
}

但我一直得到的只是这个错误:

Reddit OAUTH 响应={“错误”:“无效授权”}

在仔细观察 Reddit 文档时,我看到一条线说invalid_grant只有在

该代码已过期或已被使用

这没有任何意义,因为在测试阶段我忘记保存访问令牌。我应该可以随时重新发起这个请求。为什么会有这个限制?在保存访问令牌之前,我真的想看看响应是什么样的。现在,显然似乎没有办法解决这个问题。

但任何洞察力将不胜感激。

4

0 回答 0