2012-03-30 25 views
5

Sự hiểu biết của tôi về sự khác biệt giữa oauth_awareoauth_requiredaware không bắt buộc ủy quyền, trong khi required, nhưng đó không phải là những gì tôi thấy trong thực tế. Tôi có hai RequestHandlers webapp bên dưới, một trong số đó có phương thức get() được trang trí với decorator.oauth_aware và phương thức kia có decorator.oauth_required. Tuy nhiên, khi tôi chạy cục bộ hoặc trên App Engine, cả hai ngay lập tức chuyển hướng đến luồng đăng nhập.OAuth2Decorator oauth_aware lực lượng xác thực

Mục tiêu là dành cho SplashHandler để cung cấp cho người dùng một liên kết để cho phép nếu họ chưa làm như vậy và nếu có, hãy chuyển tiếp đến /tasks/.

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) 

Trả lời

7

Phương pháp oauth_aware nhắm đến việc có thể trả lời câu hỏi 'Chúng tôi có mã thông báo truy cập cho người dùng hiện tại không?'. Cách duy nhất nó có thể trả lời điều này là biết ai là người dùng hiện tại, và để làm điều đó nó sử dụng api người dùng ứng dụng động cơ, bản thân yêu cầu lời nhắc cấp quyền để nhận email/id người dùng của bạn thông qua chuyển hướng bạn đang xem. Với oauth_required bạn thực sự nhận được 2 chuyển hướng, cùng một công cụ ứng dụng này, sau đó là một trong những oauth yêu cầu sự cho phép để G + hoặc Docs hoặc bất cứ điều gì.

Tôi tình cờ nghĩ rằng điều này không đặc biệt hữu ích, tôi nghĩ rằng trường hợp sử dụng của bạn phổ biến hơn nhiều nhưng rõ ràng là tác giả thư viện không đồng ý.

Nói rằng, mã bên trong hàm oauth_aware không quá phức tạp, bạn có thể tạo trang trí của riêng mình dựa trên nó không thực hiện chuyển hướng đầu tiên. Sự khác biệt sẽ là trong trường hợp của bạn, câu trả lời cho cùng một câu hỏi sẽ là 'Có' hoặc 'Tôi không biết', không bao giờ là 'Không' dứt khoát.

+0

Cảm ơn điều này - điều đó có ý nghĩa rất nhiều. Tôi đồng ý rằng trường hợp sử dụng của tôi có lẽ là phổ biến hơn, nhưng tôi thiên vị (: Tôi sẽ xem xét nguồn gốc của 'oauth_aware' và viết của riêng tôi. Cảm ơn một lần nữa! –

Các vấn đề liên quan