0

Googleカレンダーに書き込むことができるように、Gdata認証の認証トークンを取得したいと思います。カレンダー サービスにトークンを送信できるように、認証後にトークンを取得する際に問題が発生しています。

appengine が提供するデフォルトのログイン画面 (/_ah/login) を使用しており、ログインして認証することはできますが、URL が書き換えられているため、self.request.uri から認証トークンを引き出すことができません。

例:

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<mpl=gm&ahname=アプリ+名前&sig=65e70293a754da54fe06ecbedbb59213

This is after authentication and the URL was pulled out of firebug 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()
4

2 に答える 2

3

ログイン画面はアプリケーションに対してユーザーを認証するだけで、ユーザーの gdata に対する承認は与えません。

カレンダー API の使用をユーザーに承認してもらう必要があります。ここで oauth を使用することをお勧めします: http://code.google.com/apis/gdata/docs/auth/overview.html#OAuth

これは 1 回だけ行う必要があり、その後のすべての呼び出しのためにそのユーザーの oauth トークンを保存します。

于 2010-01-20T14:17:05.200 に答える
0

未処理のトークンの数には制限があります。たとえば、可能なユーザー数です。未処理の ClientLogin トークンの数はどうですか?

于 2010-09-23T22:10:17.433 に答える