spotify-web-api-node:authorizationCodeGrant() 给出 400 - 错误请求

Posted

技术标签:

【中文标题】spotify-web-api-node:authorizationCodeGrant() 给出 400 - 错误请求【英文标题】:spotify-web-api-node: authorizationCodeGrant() give a 400 - Bad Request 【发布时间】:2018-06-07 14:43:39 【问题描述】:

我使用 npm 模块 spotify-web-api-node 来使用 Spotify Web API,而无需编写大量代码。

我按照here 给出的示例从 Spotify 获取授权码。然后,我使用此代码从 Spotify 获取 Access TokenRefresh Token 并执行我想要的所有操作。

当我在这里询问 Access Token 时出现问题:

router.get('/auth/spotify/success', (req, res, next) => 
    let spotifyApi = new SpotifyWebApi(
        clientId: 'my-client-id',
        clientSecret: 'my-client-secret',
        redirectUri: 'http://localhost:3000/'
                 // The URI is registered to Spotify redirect URIs
    )

    const code = req.query.code

    spotifyApi.authorizationCodeGrant(code)
    .then(data => 
        console.log('The token expires in ' + data.body['expires_in'])
        console.log('The access token is ' + data.body['access_token'])
        console.log('The refresh token is ' + data.body['refresh_token'])

        // Set the access token on the API object to use it in later calls
        spotifyApi.setAccessToken(data.body['access_token'])
        spotifyApi.setRefreshToken(data.body['refresh_token'])


        res.render('index',  title: 'Connected !' )
    )
    .catch(err => 
        console.log('Something went wrong!', err);

        res.render('index',  title: 'Error !' )
    )
)

此代码记录:

Something went wrong!  [WebapiError: Bad Request] name: 'WebapiError', message: 'Bad Request', statusCode: 400 

我的代码有什么问题?我该怎么做才能从 Spotify 获得访问令牌和刷新令牌?谢谢!

【问题讨论】:

我对 Spotify API 一无所知,但您的 redirectUri 似乎很可疑。不应该是公共网址吗? 好吧,当我使用 localhost 请求授权码时,它可以完美运行 我用公共域试过了,不行 所以你的端点'/auth/spotify/success'被调用,你的代码变量被正确初始化并且spotifyApi.authorizationCodeGrant调用失败,对吧? 没错。我尝试了很多事情,我真的需要通过这种方式进行身份验证才能执行我想要的操作。 【参考方案1】:

问题很简单(我浪费了 2 天时间......)。如 Spotify API 文档 here 中所述。 谈到redirect_uri 参数,文档说:

TLDR 阅读:

此参数的值必须与请求授权码时提供的redirect_uri 值完全匹配。

所以在我的代码中:

router.get('/auth/spotify/success', (req, res, next) => 
    let spotifyApi = new SpotifyWebApi(
        clientId: 'my-client-id',
        clientSecret: 'my-client-secret',
        redirectUri: 'http://localhost:3000/'
                 // Changing this...
        redirectUri: 'http://localhost:3000/auth/spotify/success'
                 // ...to this made it work !
    )

    // [...]

我也很抱歉,因为没有人能找到问题所在,因为我没有给你完整的代码说“第一部分有效!”。是的,它有效,但它包含有关我的问题的有用线索。

【讨论】:

以上是关于spotify-web-api-node:authorizationCodeGrant() 给出 400 - 错误请求的主要内容,如果未能解决你的问题,请参考以下文章

spotify-web-api-node - WebapiError:未经授权

使用 spotify-web-api-node 生成身份验证令牌

如何从方法 JS 访问类变量

使用客户端凭据流刷新 spotify 令牌

即使使用 Await,Promise 也会不断返回 Undefined

Node.js Express Spotify API保存在会话中