2012-11-03 39 views
6

में पेज रीफ्रेश के बीच नोड-डबॉक्स टोकन को कैसे रखें I, node-dbox और Express का उपयोग करके थोड़ा सा एप्लिकेशन एक साथ रखने की कोशिश कर रहा हूं। जब DropBox प्राधिकरण के लिए अनुरोध - it's a 3 step process, पहली जरूरत request_token प्राप्त करने के लिए, तो उपयोगकर्ता उन्हें ड्रॉपबॉक्स पृष्ठ पर जाकर, और उसके बाद ही access_token के लिए अनुरोध, पर request_token आधारित है और तथ्य यह है कि उपयोगकर्ता के अनुरोध को प्राधिकृत किया है अधिकृत करता है। क्योंकि request_token उदाहरण चला गया है !, तो चरण 3 में मैं एक access_token के लिए अनुरोध नहीं कर सकते, यह -नोडजेएस/एक्सप्रेस

हालांकि, समय से मैं पेज चरण 1 और 2 (request_token हो रही है, और यूआरएल के साथ उपयोगकर्ता प्रदान) के लिए कार्य किया आवश्यकता है request_token पारित किया जा रहा

मैं एक कुकी में request_token को बचाने के लिए कोशिश कर रहा हूँ, लेकिन देखते हुए संवेदनशील डेटा है कि यह ग्राहक के लिए भेज रहा है इस तरह के एक अच्छा विचार नहीं हो सकता है। कोई विचार?

सरलीकृत कोड के नीचे है:

(function() { 
    var dbox = require('dbox'), 
     config = require('easy-config'), 
     express = require('express'), 
     dboxApp = dbox.app(config.dropbox_credentials), 
     app = express(); 

    app.use(express.cookieParser()); 

    app.get('/', function(req, res) { 
     dboxApp.requesttoken(function(status, request_token) { 
      res.cookie('request_token', JSON.stringify(request_token)); 
      res.send("<a href='" + request_token.authorize_url + "' targe='_new'>authorize via dropbox</a><br/>" + "<a href='/next'>next</a>"); 
     }); 
    }); 

    app.get('/next', function(req, res) { 
     var request_token = JSON.parse(req.cookies.request_token); 
     if(request_token) { 
      dboxApp.accesstoken(request_token, function(status, access_token) { 
       var client = dboxApp.client(access_token); 
       client.account(function(status, reply){ 
        res.send(reply); 
       }); 
      }); 
     } else { 
      res.send('sorry :('); 
     } 
    }); 

    app.listen(3000); 

})(); 

बोनस सवाल: client साथ access_token, तो या तो या ग्राहक के कहने access_token बनाई गई है पृष्ठ के रूप में अच्छी तरह से क्या सबसे अच्छा तरीका ताज़ा करता भर में, बनाए रखा जा करने की जरूरत है? के रूप में यहां कहा गया है ड्रॉपबॉक्स डेवलपर संदर्भ आप अनुरोध के साथ यह निर्दिष्ट करने के द्वारा एक कॉलबैक यूआरएल प्रदान कर सकते हैं के अनुसार

:

+0

आप कभी भी इस के लिए एक समाधान मिला? मैं एक ही चीज़ के साथ संघर्ष कर रहा हूं - सही एक्सेस टोकन के साथ ड्रॉपबॉक्स से वापस अपने ऐप पर रीडायरेक्ट कैसे करें। – Lewis

उत्तर

2

मैं इसे निम्न कार्य करके काम कर पाने में कामयाब रहे

https://www.dropbox.com/developers/blog/20

https://www.dropbox.com/1/oauth/authorize?oauth_token=<request-token>&oauth_callback=<callback-url> 

सत्र में अनुरोध टोकन संग्रहीत करके और कॉलबैक यूआरएल पर रीडायरेक्ट करके आप अनुरोध टोकन तक पहुंच सकते हैं और अपने रास्ते पर जा सकते हैं। एक्सप्रेस मार्ग संचालकों के एक जोड़े, एक पैरामीटर के रूप एक सदस्य आईडी पारित कर दिया अनुरोध करने के लिए और फिर प्रतिक्रिया इस प्रकार दिखाई देंगे संभाल:

linkAccount : function(req, res){ 
     var memberId = req.params.memberId, 
     appKey = 'MYAPPKEY', 
     appSecret = 'MYAPPSECRET', 
     dbox = require('dbox'), 
     dboxApp = dbox.app({ "app_key": appKey, "app_secret": appSecret }); 


     req.session.dboxStore = {}; 
     req.session.dboxStore.dboxApp = dboxApp; 

     dboxApp.requesttoken(function(status, request_token){ 
     req.session.dboxStore.request_token = request_token; 
     console.log("request_token = ", request_token); 

     res.redirect('https://www.dropbox.com/1/oauth/authorize?oauth_token='+request_token.oauth_token+ 
      '&oauth_callback=http://myhost.local/linksuccess/dropbox/'+memberId); 
     res.end; 
     }); 
    }, 

    linkSuccess : function(req, res){ 
     var memberId = req.params.memberId; 
     var appKey = 'MYAPPKEY'; 
     var appSecret = 'MYAPPSECRET'; 
     var dbox = require('dbox'); 
     var dboxApp = dbox.app({ "app_key": appKey, "app_secret": appSecret }); 
     var request_token = req.session.dboxStore.request_token; 

     dboxApp.accesstoken(request_token, function(status, access_token){ 
     console.log('access_token = ', access_token); 

     Member.setAuthToken(memberId, 'dropbox', access_token, function(err, member){ 
      res.render('index', { title:'SUCCESSFUL DROPBOX AUTH' }); 
      res.end; 
     }); 
     }); 
    }