2012-04-20 90 views
0

我試圖擴展connect-auth(https://github.com/ciaranj/connect-auth)來連接到http://www.500px.com oauth,但我遇到問題並且可以除了console.log之外,找不到一種方法來進行調試。Oauth for Connect-auth for www.500px.com

  1. 我添加了一個策略five00px.js(不能名稱的變量500像素),按照下面,這與一些字符串替換twitter.js策略的副本。

  2. 我不斷收到無效的OAuth請求

    錯誤檢索的OAuth請求令牌:{ 「的StatusCode」:401, 「數據」: 「無效的OAuth請求」}

  3. 我實在看不出OAUTH請求,因爲它在HTTP中。

任何想法?

// five00px.js 
    /*! 
* Copyright(c) 2010 Ciaran Jessup <[email protected]> 
* MIT Licensed 
*/ 
var OAuth= require("oauth").OAuth, 
    url = require("url"), 
    http = require('http'); 

module.exports= function(options, server) { 
    options= options || {} 
    var that= {}; 
    var my= {}; 

    // Construct the internal OAuth client 
    my._oAuth= new OAuth("https://api.500px.com/v1/oauth/request_token", 
         "https://api.500px.com/v1/oauth/access_token", 
         options.consumerKey, options.consumerSecret, 
         "1.0A", options.callback || null, "HMAC-SHA1"); 
    console.log('1'); 
    // Give the strategy a name 
    that.name = "five00px"; 

    // Build the authentication routes required 
    that.setupRoutes= function(app) {console.log('2setupRoutes'); 
    app.use('/auth/five00px_callback', function(req, res){console.log('3five00px_callback'); 
     req.authenticate([that.name], function(error, authenticated) {console.log('4authenticate'); 
     res.writeHead(303, { 'Location': req.session.five00px_redirect_url }); 
     res.end(''); 
     }); 
    }); 
    } 

    // Declare the method that actually does the authentication 
    that.authenticate= function(request, response, callback) {console.log('5authenticate'); 
    //todo: if multiple connect middlewares were doing this, it would be more efficient to do it in the stack?? 
    var parsedUrl= url.parse(request.originalUrl, true); 
    this.trace('parsedUrl=' + request.originalUrl); 

    //todo: makw the call timeout .... 
    var self= this; 
    if(request.getAuthDetails()['500px_login_attempt_failed'] === true) { 
     // Because we bounce through authentication calls across multiple requests 
     // we use this to keep track of the fact we *Really* have failed to authenticate 
     // so that we don't keep re-trying to authenticate forever. 
     delete request.getAuthDetails()['500px_login_attempt_failed']; 
     self.fail(callback); 
    } 
    else { 
     if(parsedUrl.query && parsedUrl.query.denied) { 
     self.trace('User denied OAuth Access'); 
     request.getAuthDetails()['500px_login_attempt_failed'] = true; 
     this.fail(callback); 
     } 
     else if(parsedUrl.query && parsedUrl.query.oauth_token && request.session.auth["500px_oauth_token_secret"]) { 
      self.trace('Phase 2/2 : Requesting an OAuth access token.'); 
      my._oAuth.getOAuthAccessToken(parsedUrl.query.oauth_token, request.session.auth["500px_oauth_token_secret"], 
           function(error, oauth_token, oauth_token_secret, additionalParameters) { 
            if(error) { 
            self.trace('Error retrieving the OAuth Access Token: ' + error); 
            request.getAuthDetails()['500px_login_attempt_failed'] = true; 
            this.fail(callback); 
            } 
            else { 
            self.trace('Successfully retrieved the OAuth Access Token'); 
            request.session.auth["500px_oauth_token_secret"]= oauth_token_secret; 
            request.session.auth["500px_oauth_token"]= oauth_token; 
            var user= { user_id: additionalParameters.user_id, 
               username: additionalParameters.screen_name } 
            self.executionResult.user= user; 
            self.success(user, callback) 
            } 
           }); 
     } 
     else { 


     my._oAuth.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, oauth_authorize_url, additionalParameters) { 
      if(error) { 
      self.trace('Error retrieving the OAuth Request Token: ' + JSON.stringify(error)); 
      callback(null); // Ignore the error upstream, treat as validation failure. 
      } else { 
      self.trace('Successfully retrieved the OAuth Request Token'); 
      request.session['500px_redirect_url']= request.originalUrl; 
      request.session.auth["500px_oauth_token_secret"]= oauth_token_secret; 
      request.session.auth["500px_oauth_token"]= oauth_token; 
      self.redirect(response, "https://api.500px.com/oauth/authenticate?oauth_token=" + oauth_token, callback); 
      } 
     }); 
     } 
    } 
    } 
    return that; 
}; 

回答

0

不得不使用OAuth 1.0(而不是1.0A)

my._oAuth= new OAuth("https://api.500px.com/v1/oauth/request_token", 
        "https://api.500px.com/v1/oauth/access_token", 
        options.consumerKey, options.consumerSecret, 

        "1.0", 

         options.callback || null, "HMAC-SHA1");