Github 使用 Express 和 Ember.js 的 OAuth 流程
Github OAuth flow with Express and Ember.js
我对 Express.js 和 Github OAuth api 和 运行 很陌生。
我的流程是,用户从 Ember.js 应用程序中单击 link,它指向 Express 服务器上的路由。重定向到 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')
})
应用通过身份验证后,用户将被重定向回回调路由
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)
})
返回代码。从这一点开始,我使用该代码获取访问令牌。访问令牌返回,但它作为下载到我的机器的文件而不是对我的服务器的响应返回。我错过了什么?
不要进行第二次重定向。相反,您想为令牌交换执行 GET 请求。您的重定向 url 参数必须与原始重定向 url 匹配(确保它是 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);
});
我对 Express.js 和 Github OAuth api 和 运行 很陌生。
我的流程是,用户从 Ember.js 应用程序中单击 link,它指向 Express 服务器上的路由。重定向到 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')
})
应用通过身份验证后,用户将被重定向回回调路由
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)
})
返回代码。从这一点开始,我使用该代码获取访问令牌。访问令牌返回,但它作为下载到我的机器的文件而不是对我的服务器的响应返回。我错过了什么?
不要进行第二次重定向。相反,您想为令牌交换执行 GET 请求。您的重定向 url 参数必须与原始重定向 url 匹配(确保它是 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);
});