2011-03-25 15 views
21

मैं Oode को node.js. पर काम करने की कोशिश कर रहा हूं।node.js पर OAuth के साथ समस्याएं

var OAuth= require('oauth').OAuth; 
var oa = new OAuth(requestUrl,accessUrl,consumerKey,consumerSecret,"1.0A",responseUrl,"HMAC-SHA1"); 

official tutorial में अगला कदम का कहना है:: मैं नोड OAuth के दस्तावेज में इस पाया

"तो फिर सामान्य चैनलों के अनुसार एक वैध पहुँच टोकन + पहुँच टोकन गुप्त के काबू पाने "

ये " सामान्य चैनल " क्या हैं?

मुझे पता है कि उपयोगकर्ता को "विक्रेता" साइट पर किसी भी तरह प्रमाणित करना है और किसी भी तरह से एक प्रतिक्रिया यूआरएल कहा जाता है, लेकिन मुझे यह विवरण नहीं मिल रहा है कि इसे कैसे कार्यान्वित किया जाए। क्या कोई मुझे प्रबुद्ध कर सकता है?

उत्तर

23

मुझे यकीन नहीं है कि ओएथ सेवा आप किससे कनेक्ट करने का प्रयास कर रहे हैं, इसलिए मैं सिर्फ उदाहरण के रूप में ट्विटर का उपयोग करूंगा। आपके ओएथ ऑब्जेक्ट को बनाने के बाद आपको पहले ऑथ टोकन का अनुरोध करने की आवश्यकता है। जब आप उस टोकन प्राप्त करते हैं, तो आपको ट्विटर के लिए रीडायरेक्ट करने की आवश्यकता होती है, उनके प्रमाणीकृत पृष्ठ जो या तो उन्हें लॉगिन करने के लिए संकेत देते हैं, फिर पूछता है कि ऐप लॉगिन करने के लिए ठीक है या नहीं।

oa.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, results){ 
    if (error) new Error(error.data) 
    else { 
    req.session.oauth.token = oauth_token 
    req.session.oauth.token_secret = oauth_token_secret 
    res.redirect('https://twitter.com/oauth/authenticate?oauth_token='+oauth_token) 
    } 
}); 

आप पहली बार OAuth वस्तु बनाया, तब आपको एक responseURL, या कॉलबैक यूआरएल निर्धारित किया है। यह कुछ भी हो सकता है, मेरे ऐप के लिए यह सिर्फ/ओथ/कॉलबैक है। उस कॉलबैक में आपको ओथ सत्यापनकर्ता टोकन प्राप्त होता है। फिर आप एक्सेस टोकन का अनुरोध करने के लिए ओथ अनुरोध टोकन और ओथ सत्यापनकर्ता टोकन दोनों का उपयोग करते हैं। जब आप एक्सेस टोकन प्राप्त करते हैं तो आपको उनके उपयोगकर्ता नाम की तरह कुछ भी प्राप्त होगा।

app.get('/oauth/callback', function(req, res, next){ 
    if (req.session.oauth) { 
    req.session.oauth.verifier = req.query.oauth_verifier 
    var oauth = req.session.oauth 

    oa.getOAuthAccessToken(oauth.token,oauth.token_secret,oauth.verifier, 
     function(error, oauth_access_token, oauth_access_token_secret, results){ 
     if (error) new Error(error) 
     console.log(results.screen_name) 
    } 
); 
} else 
    next(new Error('No OAuth information stored in the session. How did you get here?')) 
}); 

आशा है कि इससे मदद मिलती है! जब मैंने इस पर शुरुआत की तो मुझे भी यही समस्याएं थीं।

+0

इसके लिए बहुत बहुत धन्यवाद! आपने इसे कैसे समझ लिया? परीक्षण और त्रुटि या क्या आपको एक अच्छा ट्यूटोरियल मिला? – Thomas

+1

वास्तव में एक ट्यूटोरियल नहीं मिला था। ओउथ मॉड्यूल के स्रोत – mattmcmanus

2

"ओथ डांस" (इसके स्नेही रूप से ज्ञात) के माध्यम से उपयोगकर्ता को चलने के बाद आपके एप्लिकेशन को एक्सेस टोकन जारी किया जाता है। इसका मतलब प्राधिकरण के लिए अनुरोध टोकन प्राप्त करना और उपयोगकर्ता को प्रदाता (ट्विटर, इस मामले में) पर रीडायरेक्ट करना है। यदि उपयोगकर्ता प्रमाणीकरण प्रदान करता है, तो ट्विटर उपयोगकर्ता को आपके एप्लिकेशन पर उस कोड के साथ रीडायरेक्ट करता है जिसे एक्सेस टोकन के लिए आदान-प्रदान किया जा सकता है।

नोड-ओथ का उपयोग इस प्रक्रिया को प्रबंधित करने के लिए किया जा सकता है, लेकिन एक उच्च स्तरीय पुस्तकालय इसे अधिक आसान बना देगा। Passport (जो मैं लेखक हूं), एक ऐसी पुस्तकालय है। इस मामले में, Twitter authentication पर मार्गदर्शिका देखें, जो कोड की कुछ पंक्तियों तक ओएथ नृत्य को सरल बनाता है।

उसके बाद, आप अपने डेटाबेस में एक्सेस टोकन को सहेज सकते हैं और नोड-ओथ का उपयोग करके सामान्य तरीके से संरक्षित संसाधनों तक पहुंचने के लिए इसका उपयोग कर सकते हैं।

+0

के माध्यम से ट्विटर ओथ दस्तावेज़ों और rummaging द्वारा जाकर ज्यादातर इसे समझ लिया पासपोर्ट.जेएस http-प्रॉक्सी पर oauth करने के लिए कोई तरीका प्रदान करता है ?? –

+1

यहां नोड-ओथ के लिए एक पैच है: https://github.com/ciaranj/node-oauth/pull/108 मैं उस विलय को देखना चाहता हूं, जो आप जो मांग रहे हैं उसे अनुमति देगा। –

+0

धन्यवाद एक टन जो मदद करता है !! –

0

एक अद्यतन उपयोगकर्ता समय के लिए ट्वीट पोस्ट करने के लिए:

@mattmcmanus, @mattmcmanus अच्छा जवाब का विस्तार, मैं समय के लिए ट्वीट पोस्ट करने के लिए करना चाहते हैं। इसके लिए, मैं ऊपर दिए गए मैटकैनस के समान कोड का उपयोग कर रहा हूं।

चरण 1:

oa.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, results){ 
    if (error) new Error(error.data) 
    else { 
    req.session.oauth.token = oauth_token 
    req.session.oauth.token_secret = oauth_token_secret 
    res.redirect('https://twitter.com/oauth/authenticate?oauth_token='+oauth_token) 
    } 
}); 

चरण 2:

app.get('/oauth/callback', function(req, res, next){ 
     if (req.session.oauth) { 
     req.session.oauth.verifier = req.query.oauth_verifier 
     var oauth = req.session.oauth 

     oa.getOAuthAccessToken(oauth.token,oauth.token_secret,oauth.verifier, 
      function(error, oauth_access_token, oauth_access_token_secret, results){ 
      if (error) new Error(error){ 
      console.log(results.screen_name) 
      }else{ 

       // NEW CODE TO POST TWEET TO TWITTER 
       oa.post(
       "https://api.twitter.com/1.1/statuses/update.json", 
       oauth_access_token, oauth_access_token_secret, 
       {"status":"Need somebody to love me! I love OSIpage, http://www.osipage.com"}, 
       function(error, data) { 
        if(error) console.log(error) 
        else console.log(data) 
       } 
       ); 
       // POST TWEET CODE ENDS HERE 

      } 
     } 
    ); 
    } else 
     next(new Error('No OAuth information stored in the session. How did you get here?')) 
    }); 

मैं जोड़ लिया है oauth_access_token & टिप्पणी की कोड में oauth_access_token_secret। यह उपयोगकर्ता की टाइमलाइन पर एक ट्वीट अपडेट पोस्ट करेगा। मुबारक ट्वीटिंग !!!

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