2011-04-11 13 views
8

मैं उपयोगकर्ता के मेल को देखने के लिए gmail_xauth (रूबी मणि) के साथ उपयोग कर सकते हैं IAuth टोकन प्राप्त करने का प्रयास कर रहा हूं। मैं पहली बार मेल पर पहुंच के लिए गूगल के साथ अपने एप्लिकेशन और तो की स्थापना की वसीयत पंजीकृत:जीमेल के लिए omniauth oauth टोकन अमान्य हैं

config.omniauth :google, 'key', 'secret', :scope => 'https://mail.google.com/mail/feed/atom/' 

मैं तो outh/openid प्रवाह के माध्यम से जाने के लिए और गूगल मुझे करने का संकेत देता जीमेल में पहुंच की स्वीकृति, मुझे पुनः निर्देशित करने के लिए वापस ए टोकन और ओमनीथ क्रेडेंशियल्स में गुप्त & मेरा Google खाता मेरे ऐप को मेरे डेटा तक पहुंचने के लिए अधिकृत के रूप में सूचीबद्ध करता है। अब तक सब ठीक है।

अब

, जब मैं उन क्रेडेंशियल लेने के लिए और इसलिए तरह gmail_xoauth के साथ उन्हें इस्तेमाल करने की कोशिश:

require 'gmail_xoauth' 
    imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = 
nil, verify = false) 
    imap.authenticate('XOAUTH', '[email protected]', 
    :consumer_key => 'key, 
    :consumer_secret => 'secret', 
    :token => 'omniauth_returned_token', 
    :token_secret => 'omniauth_returned_secret' 
) 

मैं कोई त्रुटि मिलती है "नेट :: IMAP :: NoResponseError: अमान्य क्रेडेंशियल (विफलता)"।

दिलचस्प बात यह है कि gmail_xoauth README के ​​बाद एक पायथन उत्पन्न करने के लिए एक ही उपभोक्ता के साथ एक पायथन स्क्रिप्ट का उपयोग करके यह काम करता है।

+1

क्या आपको इस समस्या का समाधान मिला? – Pablo

+0

वही यहाँ। क्या आपको एक समाधान मिला? – Pasta

+0

मुझे इसी तरह की समस्या थी, लेकिन एक समाधान मिला। नीचे मेरा जवाब देखें। – Andrew

उत्तर

5

यह मेरे लिए काम करता है:

config.omniauth :google, 'anonymous', 'anonymous', :scope => 'https://mail.google.com/' 

मैं जीमेल मणि का उपयोग कर रहा है, इसलिए यह इस तरह दिखता है कनेक्ट करने के लिए:

gmail = Gmail.connect(:xoauth, auth.uid, 
    :token   => auth.token, 
    :secret   => auth.secret, 
    :consumer_key => 'anonymous', 
    :consumer_secret => 'anonymous' 
) 

मैं में एक प्रमाणीकरण वस्तु गुजर रही है, लेकिन आप इसे env चर env ["omniauth.auth"] से प्राप्त किया जा रहा है। मैं कुंजी/गुप्त के लिए अनाम/अज्ञात का उपयोग कर रहा हूं क्योंकि मैंने Google के साथ अपना डोमेन पंजीकृत नहीं किया है, लेकिन मेरा मानना ​​है कि आप here कर सकते हैं। यह अभी भी अनाम/अज्ञात के साथ काम करेगा, लेकिन Google केवल उपयोगकर्ता को चेतावनी देगा।

+0

अज्ञात काम करता है। धन्यवाद ... बस सोच रहा है कि संपर्क कैसे प्राप्त करें – kgpdeveloper

+0

यह अब और काम नहीं कर रहा है - जब मैं omniauth ऑब्जेक्ट तक पहुंचता हूं तो रहस्य शून्य होता है। एक अलग लिंक है जो http://blog.asif.in/blog/2012/03/03/google-oauth-and-rails/ पर काम करता है लेकिन मैं इसे काम करने में सक्षम नहीं था। – David

+0

यह अब काम नहीं करता – tommybond

3

Google का OAuth1 प्रोटोकॉल अब बहिष्कृत है और कई रत्नों ने अभी तक अपने OAuth2 प्रोटोकॉल का उपयोग करने के लिए अपडेट नहीं किया है। यहां उनके OAuth2 प्रोटोकॉल का उपयोग करके Google से ईमेल लाने का एक कामकाजी उदाहरण दिया गया है। यह उदाहरण mail, gmail_xoauth, omniauth, और omniauth-google-oauth2 रत्नों का उपयोग करता है।

आपको अपने एपी टोकन प्राप्त करने के लिए Google's API console में अपना ऐप पंजीकृत करने की भी आवश्यकता होगी।

# in an initializer: 
ENV['GOOGLE_KEY'] = 'yourkey' 
ENV['GOOGLE_SECRET'] = 'yoursecret' 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'], { 
    scope: 'https://mail.google.com/,https://www.googleapis.com/auth/userinfo.email' 
    } 

end 

# ...after handling login with OmniAuth... 

# in your script 
email = auth_hash[:info][:email] 
access_token = auth_hash[:credentials][:token] 

imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false) 
imap.authenticate('XOAUTH2', email, access_token) 
imap.select('INBOX') 
imap.search(['ALL']).each do |message_id| 

    msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822'] 
    mail = Mail.read_from_string msg 

    puts mail.subject 
    puts mail.text_part.body.to_s 
    puts mail.html_part.body.to_s 

end 
+1

मुझे अभी भी एक त्रुटि मिल रही है जहां मेरे पास अवैध प्रमाण-पत्र हैं। – locoboy

+1

मुझे अभी भी इस जवाब के साथ अवैध प्रमाण-पत्र मिलते हैं। – tommybond