2010-05-14 11 views
5

मैं Google ऐप इंजन में अपने स्कूल समाचार पत्र के लिए एक कहानी असाइनमेंट सिस्टम को पूरा करने की कोशिश कर रहा हूं। यह लेखकों के लिए समय सीमा ट्रैक करेगा, लेखकों को कहानियां लेने की अनुमति देगा, और हफ्तों की कहानियों के "एक नज़र में" दृश्य दें। मेरे साथी और मैं इसे अपने समाचार पत्रों Google Apps स्थापना के साथ पूरी तरह से एकीकृत करने की कोशिश कर रहे हैं। ओह, और हमें 3 पैर वाले ओथ का उपयोग करना होगा क्योंकि हमारे पास Google Apps प्रीमियर नहीं है।ओथ + एओइड + पायथन + Google ऐप इंजन + Google दस्तावेज़

उस प्रयास में, मैंने एओइड पर ठोकर खाई और संघीय लॉगिन कार्य करने के निर्देशों का पालन करने में सक्षम था। यह बहुत अच्छा है!

जहां मैं परेशानी में भाग रहा हूं, उपयोगकर्ताओं को Google दस्तावेज़ों की सूची प्राप्त करने के लिए ओथ का उपयोग कर रहा है। मेरे पास यहां एक टेस्ट पेज सेट है: mustrun.cornellsun.com/test। यह मुझे त्रुटियां दे रहा है - मैंने उन्हें इस मेल के नीचे कॉपी किया है। मुझे नहीं पता कि यह मेरे उपभोक्ता रहस्य के साथ क्या करना है (क्या मुझे Google मार्केटप्लेस से प्राप्त कुंजी का उपयोग करना चाहिए? या क्या मुझे डोमेन पेज प्रबंधित करने से प्राप्त कुंजी का उपयोग करना चाहिए?)। अभी मैं प्रबंधन पृष्ठ से प्राप्त कुंजी का उपयोग कर रहा हूं

यह भी जटिल है कि वास्तविक ऐपस्पॉट डोमेन mustrun2sun [] .appspot [बहुत नया एक से अधिक लिंक पोस्ट नहीं कर सकता] .com, लेकिन मैंने इसे Google ऐप्स में सेट अप किया है ताकि मेरे डोमेन से केवल उपयोगकर्ता लॉग इन कर सकें और यह भी कि मेरे डोमेन पर ऐप तैनात किया गया हो। (के रूप में must[]run[].corn[]ellsun[].[]com & सब कुछ इस तरह के रूप में यह के लिए संदर्भित करता एप्लिकेशन तैनात किया जाता है, यहां तक ​​कि प्रबंधन डोमेन बात में।)

मैं GDClient उपयोग कर रहा हूँ 2.0 कक्षाएं तो मैं काफी यकीन है कि सब कुछ योजना के ... यानी मैं के रूप में काम करना चाहिए हूँ मैं पुरानी सेवा सामग्री या कुछ भी नहीं उपयोग कर रहा हूँ। मैंने अपने ओथ "नृत्य" के लिए एक टेम्पलेट के रूप में htt[]p:/[]/k[]ing[]yo-bachi.blog[]spot.c[]om/2010/05/gaego[]ogleoauth.ht[]ml का उपयोग किया है क्योंकि Google उदाहरण & पुराने Google डेटा 1.0 लाइब्रेरी का उपयोग करते हैं - मुझे लगता है।

त्रुटि है कि मैं जब मैं अपने परीक्षण पृष्ठ पर जाने के हो रही है

Traceback (most recent call last): 
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 511, in __call__ 
    handler.get(*groups) 
    File "/base/data/home/apps/mustrun2sun/1.341947133742569880/main.py", line 170, in get 
    feed = client.GetDocList(auth_token=gdata.gauth.AeLoad(users.get_current_user().user_id())) #auth_token=TOKEN 
    File "/base/data/home/apps/mustrun2sun/1.341947133742569880/gdata/docs/client.py", line 141, in get_doclist 
    auth_token=auth_token, **kwargs) 
    File "/base/data/home/apps/mustrun2sun/1.341947133742569880/gdata/client.py", line 635, in get_feed 
    **kwargs) 
    File "/base/data/home/apps/mustrun2sun/1.341947133742569880/gdata/client.py", line 308, in request 
    response, Unauthorized) 
Unauthorized: Unauthorized - Server responded with: 401, <HTML> 
<HEAD> 
<TITLE>Token invalid - Invalid AuthSub token.</TITLE> 
</HEAD> 
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
<H1>Token invalid - Invalid AuthSub token.</H1> 
<H2>Error 401</H2> 
</BODY> 
</HTML> 

भी है, क्योंकि यह कठिन है w/ओ किसी भी स्रोत कोड, नीचे प्रासंगिक कोड है:

import gdata.auth 
import gdata.gauth 
import gdata.docs.client 
import gdata.docs.data 
import gdata.docs.service 
import gdata.alt.appengine 

from aeoid import middleware, users 

class GetOauthToken(webapp.RequestHandler): 
    def get(self): 
     user_id = users.get_current_user().user_id() 
     saved_request_token = gdata.gauth.AeLoad("tmp_"+user_id) 
     gdata.gauth.AeDelete ("tmp_" + user_id) 
     request_token = gdata.gauth.AuthorizeRequestToken(saved_request_token, self.request.uri) 
     #upgrade the token 
     access_token = client.GetAccessToken(request_token) 
     #save the upgraded token 
     gdata.gauth.AeSave(access_token, user_id) 
     self.redirect('/test')  

class Test(webapp.RequestHandler): 
    def get(self): 
     TOKEN = gdata.gauth.AeLoad(users.get_current_user().user_id()) 
     if TOKEN: 
      client = gdata.docs.client.DocsClient(source=SETTINGS['APP_NAME']) 
      client.auth_token = gdata.gauth.AeLoad(users.get_current_user().user_id()) #could try to put back as TOKEN? 

      self.response.out.write('moo baby') 
      client.ssl = True 
      feed = client.GetDocList(auth_token=gdata.gauth.AeLoad(users.get_current_user().user_id())) #auth_token=TOKEN 
      self.response.out.write(feed) 
      self.response.out.write('moo boobob') 
      self.response.headers['Content-Type'] = 'text/plain' 
      for entry in feed.entry: 
       self.response.out.writeln(entry.title.text) 
     else: 
      # Get unauthorized request token 
      gdata.gauth.AeDelete(users.get_current_user().user_id()) 
      client = gdata.docs.client.DocsClient(source=SETTINGS['APP_NAME']) 
      client.ssl = True # Force communication through HTTPS 

      oauth_callback_url = ('http://%s/get_oauth_token' % 
            self.request.host) 

      request_token = client.GetOAuthToken(
       SETTINGS['SCOPES'], oauth_callback_url, SETTINGS['CONSUMER_KEY'], 
       consumer_secret=SETTINGS['CONSUMER_SECRET']) 
      gdata.gauth.AeSave(request_token, "tmp_"+users.get_current_user().user_id()) 
      # Authorize request token 
      domain = None#'cornellsun.com' 
      self.redirect(str(request_token.generate_authorization_url(google_apps_domain=domain))) 

मैं उत्तर के लिए वेब पर उच्च और निम्न देख रहा हूं & मैं एक नहीं ढूंढ पाया।

उत्तर

0

मैं व्यक्तिगत रूप से OAuth साथ काम नहीं किया है, लेकिन कुछ चीजें मैंने देखा है कि हो सकता है (या नहीं हो सकता) मदद:

  1. 401 त्रुटि होने की संभावना है एक HTTP 401 त्रुटि, जिसका अर्थ है कि यूआरएल था मान्य लेकिन आवश्यक प्रमाणीकरण। यह स्पष्ट रूप से विफल OAuth प्रयास द्वारा समझाया गया है, लेकिन यह उन उपयोगकर्ताओं को रीडायरेक्ट करना भी महत्वपूर्ण हो सकता है जो किसी अन्य पृष्ठ में लॉग इन नहीं हैं।

  2. जब आप अपने फ़ीड चर निर्दिष्ट त्रुटि हो रहा है। क्या auth_token पैरामीटर बस उपयोगकर्ता नाम होना चाहिए?

3. आप लाइन का उपयोग कर रहे हैं।

gdata.gauth.AeLoad(users.get_current_user().user_id()) 

अक्सर। भले ही यह अपने प्रमाणन समस्याओं से संबंधित नहीं हो सकता है, तो आप शायद एक बार इस क्वेरी बनाने और एक चर में भंडारण बंद बेहतर होगा। फिर जब आपको इसे फिर से चाहिए, तो इसे इस तरह से एक्सेस करें। यह आपके आवेदन की गति में सुधार करेगा।

फिर से, मैं क्षमा चाहता हूं कि मेरे पास कोई विशिष्ट ओथ अनुभव नहीं है। मैंने बस कुछ चीजों को स्कैन करने और खोजने की कोशिश की जो आपको सही रास्ते पर चकित कर सकते हैं।

3

मैं OpenID का उपयोग करता है कि एक काम अजगर App इंजन एप्लिकेशन है, और OAuth अपने Google संपर्कों पाने के लिए:

http://github.com/sje397/Chess

यह कम से चल रहा है:

http://your-move.appspot.com

ध्यान दें कि Aeoid अब और आवश्यकता नहीं है, क्योंकि ऐप इंजन में built-in OpenID समर्थन है।

+0

Aeoid (या अन्य openid lib) कर रहा था OAuth + OpenID कॉम्बो के लिए आवश्यकता हो सकती है। – iamgopal

+0

@iamgopal - क्या आपने मेरा जवाब पढ़ा? – sje397

1

मुझे बस कुछ घंटों बर्बाद करने का पता चला, अगर यूआरएल सही नहीं है तो आपको 401 भी मिलेंगे।

मेरे उदाहरण में, मैं

.../buzz/v1/activities/@me/@self**?&**alt=json 

के बजाय

.../buzz/v1/activities/@me/@self**?**alt=json