Bài đăng này là bản theo dõi cho How to do OAuth-requiring operations in a GAE Task Queue?. Theo đề nghị của bossylobster trong bài viết này, tôi đã cố gắng để hardcode user_id
trong kịch bản của tôi, nhưng nhiệm vụ cron luôn thất bại:Làm cách nào để thực hiện các thao tác yêu cầu OAuth trong một công việc cron GAE?
tôi có thể nhìn thấy nó được kích hoạt trong các bản ghi ...
2013-05-31 14:20:00.879 /update 302 5ms 0kb AppEngine-Google; (+http://code.google.com/appengine) 0.1.0.1 - - [31/May/2013:11:20:00 -0700] "GET /update HTTP/1.1" 302 385 - "AppEngine-Google; (+http://code.google.com/appengine)" "myapp.appspot.com" ms=6 cpu_ms=0 cpm_usd=0.000043 queue_name=__cron task_name=... app_engine_release=1.8.0 instance=...
- ... tuy nhiên, nó luôn luôn thất bại (xuất hiện như đỏ "không" trong phần Cron Jobs AppEngine), và hàng đợi nhiệm vụ đó là nghĩa vụ để chạy không bao giờ bật lên trong phần công tác Queues.
Điều tôi không hiểu là nếu tôi mở /update
theo cách thủ công, tôi có lời nhắc đăng nhập bên dưới. Làm thế nào là cron nghĩa vụ phải bỏ qua điều đó? Làm thế nào tôi có thể gỡ lỗi những gì đang xảy ra?
Cảm ơn sự trợ giúp.
EDIT/followup về @dlebech câu trả lời: Vấn đề vẫn tồn tại sau khi thêm một dòng login: admin
đến lo ngại url
trong app.yaml
. Tại địa phương (bởi đăng nhập như một quản trị viên và quý khách đến thăm URL của trình xử lý trong trình duyệt của bạn như đã đề cập bởi Securing URLs for Cron) mọi thứ diễn ra tốt đẹp, nhưng một khi tôi triển khai, ứng dụng của tôi không bao giờ được quá khứ trang trí OAuth2:
với một vài debug
print
báo cáo ...import webapp2 ... YOUTUBE_RW_SCOPE = "https://www.googleapis.com/auth/youtube" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" print "Building youtube object" print "Built youtube object" youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION) print "Building decorator object" decorator = OAuth2DecoratorFromClientSecrets(CLIENT_SECRETS, YOUTUBE_RW_SCOPE) print "Built decorator object" ... class FetchHandlerPage(webapp2.RequestHandler): print "Entering FetchHandlerPage" @decorator.oauth_required def get(self): print "Entering FetchHandlerPage:get" gae_user_id = USER_ID query_string = urlencode({'user_id': gae_user_id}) taskqueue.add(url='/fetchworker?' + query_string, method='GET')
... đây là những gì tôi thấy sau khi triển khai trong nhật ký GAE tôi (các bản ghi dừng lại ở dòng cuối cùng, không có gì xảy ra tiếp theo):
2013-05-31 16:12:02.765 /fetch 302 1746ms 0kb AppEngine-Google; (+http://code.google.com/appengine) 0.1.0.1 - - [31/May/2013:13:12:02 -0700] "GET /fetch HTTP/1.1" 302 385 - "AppEngine-Google; (+http://code.google.com/appengine)" "myapp.appspot.com" ms=1747 cpu_ms=844 cpm_usd=0.000070 queue_name=__cron task_name=... loading_request=1 app_engine_release=1.8.0 instance=... I 2013-05-31 16:12:02.444 URL being requested: https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest?userIp=0.1.0.1 E 2013-05-31 16:12:02.764 Building youtube object E 2013-05-31 16:12:02.764 Built youtube object E 2013-05-31 16:12:02.764 Building decorator object E 2013-05-31 16:12:02.764 Built decorator object E 2013-05-31 16:12:02.764 End static variables E 2013-05-31 16:12:02.764 Entering FetchHandlerPage I 2013-05-31 16:12:02.765 This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This requ
Xin chào, cảm ơn vì đã chỉ cho tôi về phía 'login: admin', tôi không hiểu rằng nó có hiệu ứng này. Đáng buồn thay, vấn đề vẫn tồn tại (hoặc có thể là một vấn đề khác? Tôi không chắc chắn: - /).Tôi đã thêm một ** EDIT/followup trên phần trả lời @dlebech ** vào bài đăng gốc của tôi, bạn nghĩ sao? –
Tại sao bạn vẫn cần trang trí oauth_required? – dragonx
@dragonx ứng dụng của tôi tạo danh sách phát trên YouTube, ứng dụng cần phải trải qua [điệu nhảy OAuth2] (https://developers.google.com/youtube/v3/guides/authentication#OAuth2_Flows) và trình trang trí này có vẻ là cách được đề xuất/dễ nhất đi. Liệu tôi có sai? –