我试图通过FB oauth手动实现身份验证流程。 在这里我称之为授权对话框:
<a href="https://www.facebook.com/dialog/oauth?
response_type=code
&scope=user_about_me
&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fcallback
&client_id=XXXXXXXXXXXXXXXX"
>Login FB</a>
然后它重定向回我的app服务器:
http://localhost:3000/login/callback?code=XXXXXXXXXXXXXXXXX
调用FB API graph
来交换访问令牌的代码
function exchangeCodeForAccessToken(code) {
const options = {
hostname: 'graph.facebook.com',
path: 'v2.11/oauth/access_token?client_id=XXXXXXXXXXXXXXXXX&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fcallback&client_secret=YYYYYYYYYYYYYYYYYYYY&code=' + code,
method: 'GET'
};
const req = https.request(options, (res2) => {
console.log(`STATUS: ${res2.statusCode}`);
res2.on('data', (d) => {
console.log(d);
});
});
req.end();
}
但在这里我总是得到一个没有其他迹象的400。无论我改变什么。有什么建议吗?
谢谢
修改。正如CBroe所建议的,我试图在节点请求之后立即从浏览器执行相同的请求(相同的URL,相同的查询字符串,相同的代码): 节点 - &gt; 400 浏览器 - &gt; 200 + AccessToken
答案 0 :(得分:0)
我找到了解决方案。只需将协议“https”放在host
属性中即可。