2012-11-03 5 views
6

NodeJS,node-dboxおよびExpressを使用して小さなアプリケーションをまとめようとしています。 DropBox承認をリクエストするときは、request_tokenを取得してから、ユーザーがドロップボックスページを閲覧することを許可してから、request_tokenに基づいてaccess_tokenをリクエストし、そのユーザーが許可リクエストを受けていることを確認します。NodeJS/Expressのページリフレッシュの間にnode-dboxトークンを保持する方法

はしかし、時間によって私は(request_tokenを取得し、URLをユーザに提供する)ステップ1と2のためのページを務めた - ステップ3で、私はaccess_tokenを要求することはできませんので、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); 

})(); 

ボーナス質問:ページは、同様にいただきました!最良の方法をリフレッシュする渡っclientaccess_token、そのいずれかのクライアントのインスタンスまたはaccess_tokenで作成さを維持する必要がありますか?

+0

は、あなたが今までにこの解決策を得ましたか。私は同じこと、つまり、正しいアクセストークンを使ってDropboxから自分のアプリにリダイレクトする方法に苦しんでいます。 – Lewis

答えて

2

私はそれが次のようにして作業を取得するために管理:

あなたはここに述べたように要求して、それを一緒に指定することで、コールバックURLを提供することができDropboxの開発者用リファレンスによると:

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

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

リクエストトークンをセッションに保存し、コールバックURLにリダイレクトすることで、リクエストトークンにアクセスして自分の道に進むことができます。 Expressのルートハンドラのカップルは、リクエストに、パラメータとして、会員IDを通過した後、応答は次のようになりますハンドル:

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; 
     }); 
     }); 
    } 
関連する問題