2013-05-01 7 views
17

के बिना नोड जेएस से ड्रॉपबॉक्स में फ़ाइलों को स्थानांतरित करें मैं उसके नोकोज़ से + नोडजेस + एक्सप्रेस आधारित एपीआई सर्वर चला रहा हूं और dropbox-js लाइब्रेरी का उपयोग कर रहा हूं। यहां मैं यह करना चाहता हूं:ब्राउजर आधारित ओथ प्रमाणीकरण

  1. कोई उपयोगकर्ता एक विशिष्ट एपीआई एंडपॉइंट हिट करता है और प्रक्रिया को बंद कर देता है।
  2. कुछ पाठ फ़ाइलों को नोड प्रक्रिया के माध्यम से उत्पन्न करें और उन्हें सर्वर पर सहेजें
  3. इन फ़ाइलों को एक ड्रॉपबॉक्स में स्थानांतरित करें जो मैं अपने स्वयं के प्रमाण-पत्र (उपयोगकर्ता और ड्रॉपबॉक्स ऐप) का उपयोग कर रहा हूं।

कोई याद नहीं होगा जब यादृच्छिक उपयोगकर्ता को ऐसा करने की आवश्यकता होती है .. यह एक टीम खाता है और यह एक आंतरिक उपकरण है।

जो भाग मुझे ट्रिप कर रहा है वह यह है कि ड्रॉपबॉक्स ब्राउज़र विंडो खोलना चाहता है और ऐप से कनेक्ट करने के लिए मुझसे अनुमति प्राप्त करना चाहता है। मुद्दा यह है कि जब मैं Heroku उदाहरण पर प्रक्रिया चल रहा हूं तो मैं स्पष्ट रूप से बटन पर क्लिक नहीं कर सकता।

क्या मेरे लिए पूरी तरह से नोड में ऐप तक पहुंच अधिकृत करने का कोई तरीका है?

मुझे लगता है कि मैं संभावित रूप से बटन पर क्लिक करने के लिए एक phantomJS प्रक्रिया का उपयोग कर सकता हूं - लेकिन यह बहुत जटिल लगता है और यदि संभव हो तो मैं इससे बचना चाहूंगा।

यहाँ मेरी प्रमाणीकरण कोड है:

// Libraries 
    var Dropbox   = require('dropbox'); 

    var DROPBOX_APP_KEY = "key"; 
    var DROPBOX_APP_SECRET = "secret"; 

    var dbClient = new Dropbox.Client({ 
     key: DROPBOX_APP_KEY, secret: DROPBOX_APP_SECRET, sandbox: false 
    }); 

    dbClient.authDriver(new Dropbox.Drivers.NodeServer(8191)); 

    dbClient.authenticate(function(error, client) { 
     if (error) { 
     console.log("Some shit happened trying to authenticate with dropbox"); 
     console.log(error); 
     return; 
     } 


     client.writeFile("test.txt", "sometext", function (error, stat) { 
     if (error) { 
      console.log(error); 
      return; 
     } 

     console.log("file saved!"); 
     console.log(stat); 
     }); 
    }); 

उत्तर

19

मुझे परीक्षण का एक सा लिया, लेकिन यह संभव है।

dbClient.authenticate(function(error, client) { 
    console.log('connected...'); 
    console.log('token ', client.oauth.token);  // THE_TOKEN 
    console.log('secret', client.oauth.tokenSecret); // THE_TOKEN_SECRET 
    ... 
}); 

एक बार जब आप टोकन और गुप्त है, तो आप उन्हें Dropbox.Client में उपयोग कर सकते हैं:

सबसे पहले, आप ब्राउज़र के माध्यम से प्रमाणित करने और टोकन और टोकन रहस्य नहीं है कि ड्रॉपबॉक्स द्वारा दिया जाता है को बचाने की जरूरत निर्माता:

var dbClient = new Dropbox.Client({ 
    key   : DROPBOX_APP_KEY, 
    secret  : DROPBOX_APP_SECRET, 
    sandbox  : false, 
    token  : THE_TOKEN, 
    tokenSecret : THE_TOKEN_SECRET 
}); 

उसके बाद, आप अब और एक ब्राउज़र के माध्यम प्रमाणित करने के लिए होने के साथ परेशान नहीं किया जाएगा (या कम से कम जब तक नहीं कोई टोकन और गुप्त, जो ड्रॉपबॉक्स gener कर देगा बिना फिर से कोड चलाता है एक नया टोकन/गुप्त जोड़ी खा ली और पुराने लोगों को अमान्य कर दें, या ऐप्स क्रेडेंशियल रद्द कर दिए गए हैं)।

+2

इसका परीक्षण करने के लिए समय निकालने के लिए बहुत बहुत धन्यवाद! यही वह है जिसकी तलाश में मैं हूं। चीयर्स! –

+0

मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं, लेकिन मैं उपरोक्त कोड का उपयोग एक कुंजी, गुप्त, टोकन कुंजी और टोकन रहस्य के साथ कर रहा हूं, जिसे मैं जानता हूं कि सभी मान्य हैं, और मैं कुछ भी प्राप्त करने में असमर्थ हूं जब मैं फ़ाइल अपलोड करने का प्रयास करता हूं तो अनधिकृत त्रुटि। मुझे यहां क्या समझ नहीं आ रहा है? – Sydin

+1

अद्यतन: मेरा अनुमान है कि यह ड्रॉपबॉक्स-जेएस से संबंधित है oauth2 पर जा रहा है, लेकिन ऐसा लगता है जैसे प्रमाण-पत्र बदल रहे हैं; मैं एक टोकन और गुप्त के बजाय एक टोकन कैशिंग कर रहा हूं, और यह चाल चल रहा है। – Sydin

9

या आप केवल लागू अनुदान का उपयोग कर सकते हैं और ओथ टोकन प्राप्त कर सकते हैं।

 var client = new Dropbox.Client({ 
      key: "xxxxx", 
      secret: "xxxxx", 
      token:"asssdsadadsadasdasdasdasdaddadadadsdsa", //got from implicit grant 
      sandbox:false 
     }); 

ब्राउज़र पर बिल्कुल जाने की आवश्यकता नहीं है। इस लाइन की अब आवश्यकता नहीं है!

client.authDriver(new Dropbox.AuthDriver.NodeServer(8191)); 
+0

यह सही है, लेकिन इसे एक्सेस टोकन कहा जाता है, निहित अनुदान नहीं: https://blogs.dropbox.com/developers/2014/05/generate-an-access-token-for-your-own-account/ –

+0

हां, यह प्रक्रिया का सबसे अच्छा तरीका है। –

संबंधित मुद्दे