首页 > 解决方案 > 来自AuthCode 的Snoowrap 请求者返回API 错误:invalid_grant - undefined

问题描述

我能够生成授权 url,并且代码成功返回到我的 express 端点。所有这些都是通过单独的方法完成的,我不会在这里展示 - 简单的快速路线。它们对代码没有影响。我已经从浏览器 cookie 中复制/粘贴了身份验证代码,并制作了一个简单调用这些函数的测试脚本:

const snoowrap = require('snoowrap');
module.exports = {
    getAuthURL: async (managerId, modelId) => {
        return snoowrap.getAuthUrl({
            clientId: process.env.RDT_CLIENT,
            scope: ['privatemessages', 'identity', 'read', 'submit'],
            redirectUri: process.env.REDIRECT_URI,
            permanent: false,
            state: `${managerId}-${modelId}`
        });
    },
    requester: async (token) => {
        let s;
        try {
            s = await snoowrap.fromAuthCode({
                code: token,
                userAgent: process.env.RDT_AGENT,
                clientId: process.env.RDT_CLIENT,
                redirectUri: process.env.REDIRECT_URI,
                clientSecret: process.env.RDT_SECRET,
            });
        } catch (err) {
            if (err) {
                console.log(err);
            }
        }
        return s;
    }
}
require('dotenv').config();
(async () => {
    const requester = await require('./reddit/snoowrap').requester('<CODE GOES HERE>');
    const me = await requester.getMe();
    console.log(me);
})();

调用此函数会导致此错误: RequestError: API Error: invalid_grant - undefined

我有一种感觉,我只是在这里犯了一个简单的错误。如果有比我更有经验的人能给我指路,我将永远感激不尽!

编辑:

取得了一些进展——即使我将其设置为永久,我也能够一次使用授权代码。我认为发生的事情是当我停止应用程序时,创建授权代码的 snoowrap 实例现在被销毁,留下一个无用的会话 cookie。谁能证实这一点?

编辑2:

我从 authUrl 制作了一个新的访问令牌,使用该令牌调用 snoowrap.me() 一次,使用 updateAccessToken() 方法更新令牌并将其设置为浏览器 cookie,并尝试将更新的令牌用于下一个请求它仍然在第二个函数调用时说 invalid_grant 。为什么??

标签: oauthreddit

解决方案


推荐阅读