簡體   English   中英

NodeJS + Passport,檢索訪問令牌(Spotify API)

[英]NodeJS + Passport, retrieving an access token (Spotify API)

我正在學習 Node.js,並使用 Spotify API(創建播放列表)編寫一個非常簡單的 Web 應用程序。

具體來說,我一直在使用passport-spotify包,並使用提供的示例作為起點。

我已經能夠在應用程序中進行正常的 API 調用,因為它們不需要任何用戶身份驗證,但是我現在需要發出請求並提供訪問令牌。

我之前的調用顯然是應用程序公共腳本中非常簡單的 ajax 請求,但現在我需要訪問令牌,我遇到了一些障礙。

到目前為止我已經想到/嘗試了兩種方法,它們如下:

  • 將 Passport 檢索到的訪問令牌(並且似乎被擱置一旁)存儲為 cookie,然后在公共 javascript 中訪問該 cookie,就像我對其他 API 調用所做的那樣。 我不確定這種方法的安全性。 無論哪種方式,我都無法弄清楚如何將其設置為 cookie,因為這需要res.cookie() ,並且res沒有傳遞到函數中。
  • 創建一個新路由,當使用 ajax 請求時將觸發基於節點的 api 請求,因此訪問令牌保持隱藏。 下面是我為此想到的。 我確實收到了似乎表明該想法有效的響應,但我不知道如何檢索訪問令牌。

     app.get('/playlist/:name', function(req, res){ var options = { url: 'spotify api link, cannot post without more reputation', headers : { 'Accept': 'application/json', 'Authorization': 'Bearer ' + accessToken, 'Content-Type': 'application/json' }, body: JSON.stringify({ name: req.params.name, public: false }) }; request.post(options, function(error, response, body){ console.log(error); console.log(response); console.log(body); }) });

請原諒我在這方面缺乏知識 - 這是我第一次深入研究后端開發和 OAuth。 檢索訪問令牌似乎應該很容易,所以也許我的處理方式完全錯誤。

謝謝閱讀!

如果有人遇到同樣的問題,請更新:我通過為訪問令牌創建一個全局變量,在它通過應用程序時分配它,然后在回調階段app.get('/callback')...創建一個 cookie 來解決這個問題 - app.get('/callback')...在我上面提到的例子中。 然后我可以通過該 cookie 讀取我的公共 javascript 中的令牌。

我應該說我不確定這是否是最好(或最安全)的方法,但它對我的目的有效。 我認為為令牌創建全局變量不好,但我不確定。

如果有人看到我的解決方案並注意到一個問題或更好的方法,我仍然有興趣聽到。

使用訪問令牌和刷新令牌調用通行證配置的回調函數。

passport.use(
new SpotifyStrategy(
    {
      clientID: client_id,
      clientSecret: client_secret,
      callbackURL: 'http://localhost:8888/auth/spotify/callback'
    },
    function(accessToken, refreshToken, expires_in, profile, done) {
      User.findOrCreate({ spotifyId: profile.id }, function(err, user) {
        return done(err, user);
      });
    }
  )
);

您可以將該訪問令牌和刷新令牌存儲在數據庫中。 如果您的應用程序使用授權代碼流,您可以在您的數據庫中查找或創建一個用戶,並將兩個令牌存儲在該用戶對象中。 然后你可以選擇這個令牌並在你的請求中使用它。

我建議看看https://github.com/thelinmichael/spotify-web-api-node 這是 Spotify API 的包裝器,您可以在其中傳遞您的令牌,包裝器將自動將您的訪問令牌作為您發出的每個請求的標頭包含在內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM