2015-10-17 114 views
-1

爲了在我的web應用程序中獲取Spotify API的訪問令牌(由他們的Web授權流程指定),我瞭解到我必須一個POST請求。但是,當我這樣做時,由於交叉來源問題,我得到了XMLHttpRequest500 Error允許cors jQuery POST請求到Express.js服務器上的Spotify API

我已經想出瞭如何允許CORS GET請求,但不知道如何對POST請求執行相同的操作。 This link提供了配置提示,但它將GETPOST的實際路線留爲空白。

這是我的Express.js服務器的相關代碼:

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 



app.use(express.static(__dirname + '/public')); // looks in public directory, not root directory (protects files) 

app.get('/', function(req, res) { 
    // res.header("Access-Control-Allow-Origin", "*"); 
    // res.header("Access-Control-Allow-Headers", "X-Requested-With"); 
    res.send(__dirname + '\\index.html') 
}); 

app.post('/', function(req, res) { 
    res.send(req.body.spotify); 
}); 

spotifyspotify-web-api-js節點模塊)。

我以前曾嘗試將app.get的確切代碼複製到app.post,但這導致服務器崩潰。

這是在我的程序的JavaScript文件代碼,打算髮送上一個按鈕,將他們帶到Spotify的授權路徑的開始,並在用戶點擊後POST請求位覈准登錄:

$('#spotify').on('click', function() { 
    $.support.cors = true; 

    $.post("https://accounts.spotify.com/api/token"); 

     }); 

(在這種情況下,spotify是在HTML文件中的按鈕的ID)

我應該怎麼做才能繞過CORS問題在這種情況下?我被困了幾天。

+1

您的服務器無法代表他們向Spotify的API授予訪問權限(通過CORS或其他方式)。他們的應用程序必須自己響應必要的標題以允許請求。如果沒有,請求可能根本無法從客戶端獲得。備註:在Node HTTP應用程序中有用於啓用CORS的現有軟件包,包括['cors'](https://www.npmjs.com/package/cors)。此外,除了最基本的請求外,其他所有請求都可以發送[預檢'OPTIONS'](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests)請求。 。 –

+0

我已經安裝了'cors'軟件包,但是我找不到'POST'請求​​的任何配置設置。發送歌曲/藝術​​家數據的GET請求時,我可以解決CORS訪問問題。這是根據他們的開發網站Spotify的Web認證流程的一部分,這裏的一位員工說應該使用'POST',所以它應該是技術性的可能... –

+2

通過這樣做客戶端,你涉及[相同來源政策](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)在HTTP之上,創造了CORS的要求。 Spotify可以選擇是否在單個路徑上啓用CORS,看起來,他們選擇不爲'/ api/token'。所以,實現它的方式很可能是:不要試圖用Ajax嚴格執行客戶端。使用['http.request()'](https:// nodejs。org/api/http.html#http_http_request_options_callback)來實現請求。 –

回答

4

您可以在https://github.com/spotify/web-api-auth-examples(請參閱authorization_code方法)中找到使用express執行Spotify驗證流程的示例。

您無法獲得發出客戶端請求的訪問令牌/api/token。您需要向/authorize發出請求,該請求將重定向到您的redirect_uri,該號碼本身將與訪問令牌交換code

檢查該示例,該示例應涵蓋您的需求。