Github OAuth使用Express和Ember.jsstream动

我对Express.js和Github OAuth api非常陌生,并且跑到了墙上。

我要做的stream程是,用户点击Ember.js应用程序中指向Express服务器上的路线的链接。 redirect到Github oauth路由。

router.route('/oauth') .get(function(req, res){ res.redirect('https://github.com/login/oauth/authorize?client_id=XXXX&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fcallback&state=1234') }) 

应用程序通过身份validation后,用户将被redirect回到路由callback

 router.route('/callback') .get(function(req, res){ var code = req.query.code res.redirect('https://github.com/login/oauth/access_token?client_id=XXXX&client_secret=YYYY&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fgood&code=' + code) }) 

这回来了一个代码。 从这一点,我使用该代码来获取访问令牌。 访问令牌回来,但它作为一个文件下载到我的机器,而不是我的服务器的响应回来。 我错过了什么?

不要做第二次redirect。 相反,您希望为令牌交换执行GET请求。 您的redirecturl参数必须与原始redirecturl匹配(确保url已编码): http%3A%2F%2Flocalhost%3A8080%2Fcallback

 var https = require('https'); var options = { hostname: 'github.com', port: 443, path: '/login/oauth/access_token?client_id=XXXX&client_secret=YYYY&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fcallback&code=' + code', method: 'GET' }; var req = https.request(options, function(res) { console.log("statusCode: ", res.statusCode); console.log("headers: ", res.headers); res.on('data', function(d) { process.stdout.write(d); }); }); req.end(); req.on('error', function(e) { console.error(e); }); 

https://nodejs.org/api/https.html