【发布时间】:2016-11-15 12:06:26
【问题描述】:
在使用 Express/NodeJS 后端时 - 我有一个 REST GETTER,用于使用 strava (passport-strava) 进行身份验证
当我直接调用 API URL (http://localhost:3000/api/auth/strava) - 连接成功并且我能够检索配置文件信息。 但是,当通过浏览器小部件调用它时,即 HTML 按钮的 onClick 并路由到后端 - 我被抛出一个错误
XMLHttpRequest cannot load https://www.strava.com/oauth/authorize?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fstrava%2Fcallback&client_id=9769. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.
我明白这与 CORS 相关,并且必须包含标题“Access-Control-Allow-Origin”,但是将其添加到具有适当值的标题中没有任何喘息的机会。
我尝试使用 chrome://net-internals 拦截呼叫,以检查 Access-Control-Allow-Origin 是否被剥离并注意到呼叫的变化 -
直接通过API调用时——调用如下
1097271 URL_REQUEST http://localhost:3000/api/auth/strava
1097273 DISK_CACHE_ENTRY http://localhost:3000/api/auth/strava
1097275 HTTP_STREAM_JOB https://www.strava.com/
1097276 CONNECT_JOB ssl/www.strava.com:443
1097277 CONNECT_JOB ssl/www.strava.com:443
1097278 SOCKET ssl/www.strava.com:443
1097279 CONNECT_JOB ssl/www.strava.com:443
1097280 CONNECT_JOB ssl/www.strava.com:443
1097281 SOCKET ssl/www.strava.com:443
1097282 DISK_CACHE_ENTRY https://www.strava.com/oauth/authorize?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fstrava%2Fcallback&client_id=9769
1097283 HTTP_STREAM_JOB https://www.strava.com/
1097285 URL_REQUEST http://localhost:3000/api/auth/strava
1097288 DISK_CACHE_ENTRY http://localhost:3000/api/auth/strava
1097290 HTTP_STREAM_JOB https://www.strava.com/
1097291 DISK_CACHE_ENTRY https://www.strava.com/oauth/authorize?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fstrava%2Fcallback&client_id=9769
1097292 HTTP_STREAM_JOB https://www.strava.com/
1097293 DISK_CACHE_ENTRY http://localhost:3000/api/auth/strava/callback?state=&code=7b5722c72f079ee2ac5dfeb7d5140cdc6375f5cc
但是,当通过小部件路由时,调用如下
1097337 URL_REQUEST http://localhost:3000/api/auth/strava
1097339 DISK_CACHE_ENTRY http://localhost:3000/api/auth/strava
1097344 URL_REQUEST https://www.strava.com/oauth/authorize?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fstrava%2Fcallback&client_id=9769
1097346 DISK_CACHE_ENTRY https://www.strava.com/oauth/authorize?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fstrava%2Fcallback&client_id=9769
1097347 HTTP_STREAM_JOB https://www.strava.com/
1097348 CONNECT_JOB pm/ssl/www.strava.com:443
1097349 CONNECT_JOB pm/ssl/www.strava.com:443
1097350 HOST_RESOLVER_IMPL_JOB www.strava.com
1097352 SOCKET pm/ssl/www.strava.com:443
1097353 CONNECT_JOB pm/ssl/www.strava.com:443
1097354 SOCKET pm/ssl/www.strava.com:443
我似乎拔出的区别是额外的电话
1097344 URL_REQUEST https://www.strava.com/oauth/authorize?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fstrava%2Fcallback&client_id=9769
前一个场景中没有。
这些观察不仅适用于 passport-strava 包,也适用于 passport-facebook 包。因此,我认为为了进入这种状态,我正在做一些非常不正确的事情。
非常感谢任何帮助。
【问题讨论】:
-
您可以使用此插件在您的服务器上启用 cors 标头。 CORS plugin
-
谢谢,我试过了 - 但设置原点也没有帮助。
标签: javascript node.js express cors passport-facebook