2010-01-20 4 views
0

Google 캘린더에 쓸 수 있도록 Gdata 인증을위한 인증 토큰을 가져오고 싶습니다. 토큰을 캘린더 서비스에 보낼 수 있도록 인증 후 토큰을 가져 오는 데 문제가 있습니다.App Engine에서 인증 후 GData에 대한 인증 토큰을 얻을 수 없습니다.

appengine (/ _ah/login)에서 제공하는 기본 로그인 화면을 사용하고 있으며 로그인 및 인증 할 수 있지만 URL은 self.request.uri에서 Auth Token을 가져올 수 없습니다. 다시 작성되고있다 :

예 :

로그인 화면이 kiddushfund.appspot.com/admin에서 리디렉션 https://www.google.com/accounts/ServiceLogin?service=ah&continue=http://appname.appspot.com/_ah/login%3Fcontinue%3Dhttp://appname.appspot.com/admin&ltmpl=gm&ahname=App+Name&sig=65e70293a754da54fe06ecbedbb59213

이 인증 후하고 URL이 불을 지르고에서 철수했다http://appname.appspot.com/_ah/login?continue=http://appname.appspot.com/admin&auth=DQAAAL0AAAD9X_Noig8blUlg_KA02UbjgBC2yWl8XKXIVA3SI5ZQ7pJOyL4SyYPpKu5jOLAw0ol0rSUVBENBMmWC2DkH6sTxx3AlSF4UI_LcByDlacBV3Fy1At80h_ML97fLeu0LLQbgzuLxY_wTHBb5svkCVDOeVABFKf98qvZ62SGl0PrDTxs1P3lCF04ooDdFilDecGUoED6hbnjd9P7-6eqxOO9nrBCSk571uyWZCLIA-1I5f3Om_MqAIPmi_5mqLXOSv0I

이 인증 후 최종 URL하지만 난 더 이상 http://appname.appspot.com/admin

이 정말 간단한 문제처럼 보인다 어떤 도움을 주시면 감사하겠습니다 토큰을 당길 수 아니에요. 감사.

from google.appengine.ext.webapp.util import run_wsgi_app 
from google.appengine.api import users 
from google.appengine.ext import webapp 

import atom 
import settings 
import os 
import urllib 
import urllib2 
import cookielib 

import gdata.service 
import gdata.auth 
import gdata.alt.appengine 
import gdata.calendar 
import gdata.calendar.service 


class Auth(webapp.RequestHandler): 
    def __init__(self): 
     self.calendar_client = gdata.calendar.service.CalendarService() 
     gdata.alt.appengine.run_on_appengine(self.calendar_client) 

def get(self): 
    user = users.get_current_user() 
    if user: 
     token_request_url = None 
     auth_token = gdata.auth.extract_auth_sub_token_from_url(self.request.uri) 

     if auth_token: 
      self.calendar_client.SetAuthSubToken(self.calendar_client.upgrade_to_session_token(auth_token)) 

     if not isinstance(self.calendar_client.token_store.find_token(
       'http://www.google.com/calendar/feeds/'),gdata.auth.AuthSubToken): 
       token_request_url = gdata.auth.generate_auth_sub_url(self.request.uri, 
       ('http://www.google.com/calendar/feeds/default/',)) 

     #This is where I were I would look for the token but the self.request.url 
     # is only return http://appname.appspot.admin - with no token. 
     self.response.out.write(self.request.uri) 

    else: 
     self.redirect(users.create_login_url(self.request.uri)) 



def main(): 
    application = webapp.WSGIApplication([('/.*', Auth),], debug=True) 
    run_wsgi_app(application) 

if __name__ == '__main__': 
    main() 

답변

3

로그인 화면은 사용자를 애플리케이션에 대해서만 인증하며 사용자의 gdata에 대한 승인을 제공하지 않습니다.

사용자에게 캘린더 API 사용 권한을 부여해야합니다. 여기에서 oauth를 통해 제안합니다 : http://code.google.com/apis/gdata/docs/auth/overview.html#OAuth.

이 작업을 한 번 수행 한 다음 모든 후속 호출에 대해 해당 사용자의 oauth 토큰을 저장하면됩니다.

+0

명확한 설명과 올바른 방향으로 나를 안내해 주셔서 감사합니다. 저에게 맞는 해결책은 http://code.google.com/apis/gdata/docs/auth/clientlogin.html에 있습니다. 해결 방법은 client.ClientLogin (이메일, 비밀번호, source = application_name) gdata.calendar.service.CalendarService()를 호출 한 후 –

+2

확실히 clientlogin 메서드를 사용할 수 있지만 일부 사용자는 사용자 이름과 암호를주의해야합니다. 비밀번호 나 이메일 주소를 변경하면 다시 요청해야합니다. 그러나 oauth 또는 authsub 방식을 사용하는 경우 사용자 이름과 비밀번호를 변경하는 경우이를 이해할 때 사용자 이름과 비밀번호를 요청하지 않아도됩니다. gdata API에 반복적으로 액세스해야하는 경우 고려해야 할 사항. – dar

0

미해결 토큰 수에 대한 제한 사항이 있습니다 (예 : 가능한 사용자 수. 뛰어난 ClientLogin 토큰은 무엇입니까?