允许前端 JavaScript POST 请求到 https://accounts.spotify.com/api/token 端点
Posted
技术标签:
【中文标题】允许前端 JavaScript POST 请求到 https://accounts.spotify.com/api/token 端点【英文标题】:Allowing frontend JavaScript POST requests to https://accounts.spotify.com/api/token endpoint 【发布时间】:2016-01-16 07:10:52 【问题描述】:为了在我的网络应用程序中获取 Spotify API 的访问令牌(由他们的网络授权流程指定),我了解到我必须发出 POST
请求。但是,当我这样做时,由于跨域问题,我得到了XMLHttpRequest
500 Error
。
我已经想出了如何允许 CORS GET
请求,但不确定如何为 POST
请求做同样的事情。 This link 提供配置提示,但将 GET
和 POST
的实际路由留空。
这是我的 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);
);
(spotify
是 spotify-web-api-js
节点模块)。
我之前尝试将app.get
的确切代码复制到app.post
,但这会导致服务器崩溃。
这是我程序的 javascript 文件中的一段代码,它打算在用户单击一个按钮后发送POST
请求,该按钮将他们带到 Spotify 授权路径的开头并批准登录:
$('#spotify').on('click', function()
$.support.cors = true;
$.post("https://accounts.spotify.com/api/token");
);
(在这种情况下,spotify
是 HTML 文件中按钮的 ID)
在这种情况下,我应该怎么做才能绕过 CORS 问题?这几天我都被难住了。
【问题讨论】:
您的服务器无法代表他们授予对 Spotify API 的访问权限(通过 CORS 或其他方式)。他们的应用程序本身必须以必要的标头响应以允许请求。如果没有,则客户端可能根本无法发出请求。旁注:有用于在 Node HTTP 应用程序中启用 CORS 的现有包,包括cors
。此外,对于除了最基本的请求之外的所有请求,可能会在它们之前发送preflight OPTIONS
请求。
我已经安装了cors
包,但是我找不到POST
请求的任何配置设置。在发送GET
请求歌曲/艺术家数据时,我能够解决 CORS 访问问题。根据他们的开发网站,这是 Spotify 网络身份验证流程的一部分,这里的一名员工说应该使用POST
,所以它应该在技术上是可能的......
通过在客户端执行此操作,您将在 HTTP 之上涉及same origin policy,从而创建了 CORS 的要求。 Spotify 可以选择是否在各个路径上启用 CORS,而且他们似乎选择不为 /api/token
启用 CORS。因此,实现它的方法很可能是:不要尝试使用 Ajax 严格地在客户端执行它。在您的服务器中使用http.request()
发出实际请求。
【参考方案1】:
您可以在https://github.com/spotify/web-api-auth-examples 上找到使用 express 执行 Spotify 身份验证流程的示例(请参阅authorization_code
方法)。
您无法获得向/api/token
发出客户端请求的访问令牌。您需要向/authorize
发出请求,该请求将重定向到您的redirect_uri
,它本身将使用访问令牌交换code
。
检查该示例,它应该满足您的需求。
【讨论】:
以上是关于允许前端 JavaScript POST 请求到 https://accounts.spotify.com/api/token 端点的主要内容,如果未能解决你的问题,请参考以下文章