HTTP 200 但 Access-Control-Allow-Origin 被 Dribbble API 拒绝 POST
HTTP 200 but Access-Control-Allow-Origin denied with POST with Dribbble API
我在 Dribble 工作 API 并收到此错误消息:
XMLHttpRequest cannot load https://dribbble.com/oauth/token?client_id=08b8dec4ee5c7af3edd96e0a27eb97f8…a739&code=2806099a944253b647afe25ba384d68a90ca04158a1d1dceadddfe076de941f0. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:3000' is therefore not allowed access.
我已经尝试了很多不同的方法来设置 Access-Control-Allow-Origin = '*'
但其中 none 对我有用,但是阅读 console.log(res._headers) 我可以看到它正在定义中,我通过 POST 请求发送它,但 header 不工作。这是我在 Express v4 的 app.js 中定义的设置 header.
的方法之一
app.all("/", function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
res.header("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS");
res.header("Access-Control-Expose-Headers", "ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset");
res.header("Access-Control-Max-Age", "86400");
res.header("Access-Control-Allow-Credentials", true);
return next();
});
这就是我使用 Axios 发送 POST 请求的方式:
export const postUserOAUTH = code => ((dispatch) => {
axios({
url: `https://dribbble.com/oauth/token?client_id=${clientId}&client_secret=${clientSecret}&code=${code}`,
method: 'post',
}).then((response) => {
dispatch({ type: 'shots', payload: { registerResponse: response.data, token: response.data.access_token } });
console.log('ok')
}).catch((error) => {
dispatch({ type: 'shots', payload: { registerResponse: error.message } });
console.log('error')
});
});
编辑:
现在问题发生了一点变化,代码状态为 200,我收到了 API 响应我的请求的令牌,但仍然有同样的错误,代码仍在 .catch
中,而不是在.then
,我附上了 Image Error. I don't think this a problem about authentication since i am now getting the response that i want, but with this error i can't work with promises in my code. Step 2. Dribbble redirects back to your site.
的 link
看起来您正试图在 响应 object 而不是请求(以及 header您尝试设置的是服务器将在成功的 CORS 请求上设置的 header。相反,试试这个:
app.all("/", function(req, res, next) {
req.header("Origin", "*"); // ideally the '*' will be your hostname
return next();
});
服务器随后应使用您尝试在 object 上设置的 header 进行响应。
免责声明:我不了解 Express,这段代码可能无法像写的那样工作,但希望你能理解。
有关 CORS 的更多信息,请查看:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
此外,您可以在此处查看我们设置 Origin
header 的示例:http://developer.dribbble.com/v1/#cross-origin-resource-sharing
干杯,
伊恩
开发者@Dribbble
我在 Dribble 工作 API 并收到此错误消息:
XMLHttpRequest cannot load https://dribbble.com/oauth/token?client_id=08b8dec4ee5c7af3edd96e0a27eb97f8…a739&code=2806099a944253b647afe25ba384d68a90ca04158a1d1dceadddfe076de941f0. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:3000' is therefore not allowed access.
我已经尝试了很多不同的方法来设置 Access-Control-Allow-Origin = '*'
但其中 none 对我有用,但是阅读 console.log(res._headers) 我可以看到它正在定义中,我通过 POST 请求发送它,但 header 不工作。这是我在 Express v4 的 app.js 中定义的设置 header.
app.all("/", function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
res.header("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS");
res.header("Access-Control-Expose-Headers", "ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset");
res.header("Access-Control-Max-Age", "86400");
res.header("Access-Control-Allow-Credentials", true);
return next();
});
这就是我使用 Axios 发送 POST 请求的方式:
export const postUserOAUTH = code => ((dispatch) => {
axios({
url: `https://dribbble.com/oauth/token?client_id=${clientId}&client_secret=${clientSecret}&code=${code}`,
method: 'post',
}).then((response) => {
dispatch({ type: 'shots', payload: { registerResponse: response.data, token: response.data.access_token } });
console.log('ok')
}).catch((error) => {
dispatch({ type: 'shots', payload: { registerResponse: error.message } });
console.log('error')
});
});
编辑:
现在问题发生了一点变化,代码状态为 200,我收到了 API 响应我的请求的令牌,但仍然有同样的错误,代码仍在 .catch
中,而不是在.then
,我附上了 Image Error. I don't think this a problem about authentication since i am now getting the response that i want, but with this error i can't work with promises in my code. Step 2. Dribbble redirects back to your site.
看起来您正试图在 响应 object 而不是请求(以及 header您尝试设置的是服务器将在成功的 CORS 请求上设置的 header。相反,试试这个:
app.all("/", function(req, res, next) {
req.header("Origin", "*"); // ideally the '*' will be your hostname
return next();
});
服务器随后应使用您尝试在 object 上设置的 header 进行响应。
免责声明:我不了解 Express,这段代码可能无法像写的那样工作,但希望你能理解。
有关 CORS 的更多信息,请查看:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
此外,您可以在此处查看我们设置 Origin
header 的示例:http://developer.dribbble.com/v1/#cross-origin-resource-sharing
干杯,
伊恩
开发者@Dribbble