我正在构建一个幻灯片,可以在Instagram上使用某个标记来提取图片。 Instagram API要求我调用他们的身份验证URL以接收访问令牌。使用节点js和express我构建了后端,如下所示:
var express = require('express');
var app = express();
app.use(express.static('public'));
app.listen(4000,function(){
console.log("Listening to app on localhost 4000");
})
app.get('/',function(req,res){
1. make call to Instagram authorization URL:
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=http://localhost:4000&response_type=code
2. URL will be redirected with access code parameter
3. Use access code to make POST request to receive access token to be able to make GET requests.
})
我的问题是如何在NodeJS / Express中提出访问该网址的请求?这只是一个普通的http.request()吗?
我不想让用户通过重定向过程,这就是我想把它放在Node中的原因。我正在按照这些说明https://www.instagram.com/developer/authentication/
答案 0 :(得分:2)
您可以执行重定向或使用instagram-node-lib
等npm库var express = require('express');
var request = require('request');
var app = express();
app.use(express.static('public'));
app.listen(4000, function () {
console.log("Listening to app on localhost 4000");
})
app.get('/', function (req, res) {
res.redirect('https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=http://localhost:4000/mycallback&response_type=code')
})
app.get('/mycallback', function (req, res) {
//handle token retrieval here
//do a get request as per the instagram documentation using the code sent back
var code = req.query.code
var url = 'https://api.instagram.com/oauth/access_token'
var options = {
method: 'post',
body: {
client_secret: 'CLIENT_SECRET',
grant_type: 'authorization_code',
redirect_uri: 'AUTHORIZATION_REDIRECT_URI',
code: code
},
json: true,
url: url
}
request(options, function (err, res, body) {
//body should look something like this
// {
// "access_token": "fb2e77d.47a0479900504cb3ab4a1f626d174d2d",
// "user": {
// "id": "1574083",
// "username": "snoopdogg",
// "full_name": "Snoop Dogg",
// "profile_picture": "..."
// }
// }
})
})
您将始终需要重定向,因为oAuth的工作方式。用户在Instagram站点上输入密码。代码通过回调URL(重定向)发送回您的服务器。然后,您可以使用该代码来检索用户令牌。然后,您可以使用授权令牌进行后续调用。