2017-01-03 12 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:クライアント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

お役に立てば幸いです値を指定するfクライアントのIDとクライアントの秘密。 https://nodejs.org/api/process.html#process_process_envをご覧ください。 env2ライブラリの使用を検討し、環境変数をJavaScriptで宣言する代わりに.envに格納することもできます。 –

+0

私はherokuを使ってアプリをホストしています。私は 'heroku config:set CLIENT_ID = ...'を使って環境変数を設定しました。ですから、私はprocess.envを使ってそれらにアクセスできます。 'heroku config:get CLEINT_ID'を実行すると正しく出力されます。 –

+0

" data "変数が正しいかどうかを確認するか、質問に添付してください。 – 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) 
     }) 

は、それはあなたがしませんでした

関連する問題