2010-01-20 3 views
0

Я хотел бы вытащить Auth Token для аутентификации Gdata, чтобы я мог писать в календарь Google. У меня возникают проблемы с получением токена после аутентификации, чтобы я мог отправить токен службе календаря.Не удается получить токен Auth для GData после проверки подлинности в движке App Engine

Я использую экран входа по умолчанию, предоставленный appengine (/ _ah/login), и я могу войти в систему и пройти аутентификацию, однако я не могу вытащить Auth Token из self.request.uri, потому что URL переписывается:

Пример:

Войти экран Перенаправление от 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 = имя_приложения) после вызова gdata.calendar.service.CalendarService() –

+2

Хотя, конечно, можно использовать метод clientlogin, некоторые пользователи будут с осторожностью давать вам свое имя пользователя и пароль. Если они изменят свой пароль или адрес электронной почты, вам нужно будет попросить его снова. Но если вы используете подход oauth или authsub, вам не нужно запрашивать имя пользователя и пароль, если они меняют их, насколько я понимаю. Что-то нужно учитывать, если вам нужно повторно обращаться к gdata api. – dar

0

Существуют ограничения в отношении количества выдаваемых токенов - например, возможно количество пользователей. Как насчет количества токенов ClientLogin?