2012-03-30 25 views
5

Benim anlayış required yapar iken aware, yetki zorlamak olmamasıdır, ama bu pratikte gördüğüm şey değil. Aşağıdaki iki webapp RequestHandlers sahibiyim, bunlardan biri get() yönteminin decorator.oauth_aware ve diğeri decorator.oauth_required ile dekore edilmiştir. Ancak, yerel olarak veya App Engine'de çalıştırdığımda, her ikisi de hemen giriş akışına yönlendirilir. SplashHandler hedef, kullanıcıya zaten olmadıkları konusunda bir bağlantı vermek için /tasks/ iletin ve daha sonra /tasks/ iletin.OAuth2Decorator oauth_aware kuvvetleri kimlik doğrulama

decorator = OAuth2Decorator(
    client_id=settings.CLIENT_ID, 
    client_secret=settings.CLIENT_SECRET, 
    scope=settings.SCOPE, 
    user_agent='mytasks') 

class SplashHandler(webapp.RequestHandler): 
    @decorator.oauth_aware 
    def get(self): 
    if not decorator.has_credentials(): 
     self.response.out.write(template.render('templates/convert.html', 
     {'authorize_url': decorator.authorize_url()})) 
    else: 
     self.redirect('/tasks/') 

class TasksHandler(webapp.RequestHandler): 
    @decorator.oauth_required 
    def get(self): 
    tasks = get_tasks() 
    tasks.sort(key=lambda x: x['due']) 
    self.response.out.write(template.render('templates/index.html', 
               {'tasks': tasks})) 

application = webapp.WSGIApplication(
    [('/', SplashHandler), ('/tasks/', TasksHandler)], debug=True) 

cevap

7

oauth_aware yöntemi soruya cevap edememek kesin olmayı hedefleyen 'biz Geçerli kullanıcı için bir erişim belirteci var mı?'. Buna cevap vermenin tek yolu, geçerli kullanıcının kim olduğunu bilmek ve bunu yapmak için, e-posta/kullanıcı kimliğinizi görmeniz gereken yönlendirmelerle almak için bir izin istemi gerektiren uygulama motoru kullanıcıları API'sini kullanmaktır. Oauth_required ile aslında 2 yönlendirmeler, bu aynı uygulama motoru bir olsun, o zaman o zaman G + veya Docs veya ne olursa olsun izin isteyen.

Bunun özellikle yararlı olmadığını düşünüyorum, kullanım durumunuzun çok daha yaygın olduğunu düşünüyorum, ancak açıkçası kütüphane yazarı aynı fikirde değil.

Bunu söyleyerek, oauth_aware işlevi içindeki kodun çok karmaşık olmadığını söyleyerek, kendinize göre ilk yeniden yönlendirmeyi yapmayan kendi dekoratörünüzü oluşturabilirsiniz. Aradaki fark, aynı soruya verilen cevabın ya “Evet” ya da “Bilmiyorum”, asla kesin olmayan bir “Hayır” olacağıdır.

+0

Bunun için teşekkürler - bu çok mantıklı. Kullanım durumumun muhtemelen daha yaygın olduğu konusunda hemfikir olurdum, ama önyargılıyım (: "oauth_aware" kaynağına bir göz atacağım ve kendim yazacağım. Tekrar teşekkürler! –