2017-01-03 56 views
0

我一直在嘗試在我的web應用程序中使用instagram API的服務器端身份驗證。我已按照Intagram's API Page提供的步驟操作,但我一直收到錯誤you must provide a client_id。代碼寫在node/express.js中。這是我的代碼。 PS:請不要建議我使用istagram-node API。

index.jsInstagram OAuthException:您必須提供client_id

var bodyParser = require('body-parser'); 
var express = require('express'); 
var app = express(); 
var https = require('https'); 
var session = require('express-session'); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended:true})); 
app.use(express.static(__dirname+'/public')); 
app.use(session({ 
    secret: process.env.SECRET, 
    resave: true, 
    saveUninitialized: false 
})) 

app.set('port',process.env.PORT); 

app.get('/',function(req,res){ 
    res.render('index') 
}); 

app.get('/home',function(req,res){ 
    req.session.code = req.query.code; 
    var data = JSON.stringify({ 
     client_id: process.env.CLIENT_ID, 
     client_secret: process.env.CLIENT_SECRET, 
     grant_type: "authorizaton_code", 
     redirect_uri: "...", 
     code: req.session.code 
    }) 
    var options = { 
    headers:{ 
     'content-type': 'application/x-www-form-urlencoded' 
    }, 
     hostname: 'api.instagram.com', 
     path: '/oauth/access_token', 
     method:'POST', 
     port:443 
    } 
    var request = https.request(options,function(resp){ 
     resp.on('data',function(chunk){ 
     req.session.data = chunk.toString(); 
     }) 
    }) 
    request.write(data); 
    request.end(); 
    setTimeout(function(){ 
     res.json(req.session.data) 
    },5000); 
}) 

app.listen(app.get('port'),function(){ 
    console.log("All eyes at "+process.env.PORT); 
}); 
+0

你沒有指定值o f客戶端ID和客戶端密碼。你可以看看https://nodejs.org/api/process.html#process_process_env。您也可以考慮使用env2庫並將您的環境變量存儲在.env中,而不是使用JavaScript進行聲明。 –

+0

我使用的是heroku來託管應用程序。我使用'heroku config:set CLIENT_ID = ...'來設置環境變量。所以,我可以使用process.env訪問它們。我得到正確的輸出,當我運行'heroku配置:獲取CLEINT_ID' –

+0

驗證如果「數據」變量是正確的或附加到你的問題。 – Vladimir

回答

0

已經被抓我的頭整個上午。事實證明,你必須將其作爲表單數據發佈。

頂部 添加

const FormData = require('form-data'); 

那麼你的代碼如下:

var data = new FormData(); 
    data.append('client_id',config.instagramAuth.client_id) 
    data.append('client_secret',config.instagramAuth.client_secret) 
    data.append('redirect_uri',redirect_uri) 
    data.append('grant_type','authorization_code') 
    data.append('code',code) 

和你獲取:

fetch(url, { 
     method: 'POST', 
     body: data //JSON.stringify(postData) 
     }) 

希望它可以幫助

相關問題