javascript Request.js के माध्यम से कोड से ड्रॉपबॉक्स OAuth टोकन प्राप्त करें विफल; बराबर कर्ल काम करता है



http-post dropbox-api (1)

मैं http एपीआई प्रलेखन के अनुसार टोकन के लिए अपने ड्रॉपबॉक्स ऑउथ कोड का आदान-प्रदान करने की कोशिश कर रहा हूं।

जब मैं कर्ल के साथ ऐसा आदेश करता हूं:

curl https://api.dropbox.com/1/oauth2/token \
-d code=<authorization code> \
-d grant_type=authorization_code \
-u <app key>:<app secret>

सबकुछ ठीक काम करता है, और मैं अपने वाहक टोकन वापस कर रहा हूँ। दुर्भाग्य से, अनुरोध मॉड्यूल के साथ node.js में लिखा गया समकक्ष कोड क्या है।

var request = require("request");
var config = require("./config.json");

request({
  url: "https://api.dropboxapi.com/1/oauth2/token",
  method: "POST",
  auth: {
    user: config.client_id,
    pass: config.client_secret
  },
  json: {
    code: config.code,
    grant_type: "authorization_code"
  } 
}, function(err, resp, body) {
  if (err) throw err;
  console.log(body);
});

लॉग:

{ error_description: 'missing required field "grant_type"',
  error: 'invalid_request' }

डॉक्स का कहना है कि 400 त्रुटि (जो यह है) की स्थिति में, मेरे पास है:

खराब इनपुट पैरामीटर त्रुटि संदेश को इंगित करना चाहिए कि एक और क्यों

हालांकि जैसा कि ऊपर कोड से देखा जा सकता है, grant_type को निर्दिष्ट किया जा रहा है।

विशेष रूप से डॉक्स प्रमाणित करने के लिए दूसरा विकल्प देते हैं, यद्यपि यह भी विफल रहता है, यद्यपि एक अलग संदेश के साथ:

विवरण (संक्षिप्त)

ऐप की कुंजी और गुप्त का उपयोग करके / oauth2 / token को कॉल करने के लिए प्रमाणीकरण की आवश्यकता है इन्हें POST पैरामीटर (नीचे पैरामीटर देखें) या HTTP मूलभूत प्रमाणीकरण के रूप में पारित किया जा सकता है यदि मूल प्रमाणीकरण का उपयोग किया जाता है, तो ऐप कुंजी को उपयोगकर्ता नाम के रूप में प्रदान किया जाना चाहिए और पासवर्ड के रूप में एप गुप्त प्रदान किया जाना चाहिए।

पैरामीटर

  • code स्ट्रिंग उपयोगकर्ता को निर्देश देने के लिए / oauth2 / authorize? response_type = code को प्राप्त कर लिया गया कोड?
  • grant_type स्ट्रिंग अनुदान प्रकार, जो authorization_code होना चाहिए।
  • client_id स्ट्रिंग यदि क्रेडेंशियल POST पैरामीटर में पारित किए जाते हैं, तो यह पैरामीटर मौजूद होना चाहिए और ऐप की कुंजी (ऐप कंसोल में मिली) होनी चाहिए।
  • client_secret स्ट्रिंग यदि क्रेडेंशियल POST पैरामीटर में पारित किए जाते हैं, तो यह पैरामीटर मौजूद होना चाहिए और ऐप के रहस्य होने चाहिए।
  • redirect_uri स्ट्रिंग केवल यह मान्य करने के लिए प्रयुक्त होता है कि यह मूल / oauth2 / authorize से मेल खाता है, जिसका उपयोग पुन: अनुप्रेषित करने के लिए नहीं किया गया है।

वैकल्पिक प्रमाणीकरण प्रक्रिया में मेरा प्रयास:

var request = require("request");
var config = require("./config.json");

request({
  url: "https://api.dropboxapi.com/1/oauth2/token",
  method: "POST",
  json: {
    code: config.code,
    grant_type: "authorization_code",
    client_id: config.client_id,
    client_secret: config.client_secret
  } 
}, function(err, resp, body) {
  if (err) throw err;
  console.log(body);
});

लॉग:

{ error_description: 'No auth function available for given request',
  error: 'invalid_request' }

अगर मेरे दो अनुरोधों के लिए ड्रॉपबॉक्स से पूरी प्रतिक्रिया उपयोगी होगी तो मैं इसे पेस्टबिन पर पोस्ट किया

मैं redirect_uri को शामिल नहीं कर रहा हूँ क्योंकि मैंने इसे कोड प्रवाह के भाग के रूप में उपयोग नहीं किया था यह डॉक्स के अनुसार अनुमति है। किसी भी स्थिति में, curl कमांड में जब यह सफल होता है तो मुझे कोई समस्या नहीं होती है

यह ध्यान में रखते हुए कि मेरी एपीआई कॉल जब कर्ल के माध्यम से भेजा जाता है, तो मैं स्पष्ट रूप से मेरे जे एस अनुरोध के साथ कुछ गलत कर रहा हूं। वाहक टोकन प्राप्त करने के लिए मैं क्या कर सकता हूं?


यह आपके curl आदेश में दिखता है, आप एक फ़ॉर्म-एन्कोडेड POST अनुरोध भेज रहे हैं (जो कि ओअथ का उपयोग करता है), लेकिन आपके नोड.जेएस कोड में, आप JSON- एन्कोडेड अनुरोध भेज रहे हैं।

form: { ... } कोशिश करें form: { ... } इसके बजाय json: { ... }





dropbox-api