2015-10-17 80 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

检查该示例,该示例应涵盖您的需求。