【问题标题】:Secured Cron Job for Google App Engine fails to start (Node js)Google App Engine 的安全 Cron 作业无法启动(Node js)
【发布时间】:2017-12-14 06:08:53
【问题描述】:

我在谷歌应用引擎中使用安全 URL 进行 cron 作业。 一旦我在 app.yaml 中添加 login:admin,该作业就无法启动(否则它就像一个魅力)。

这是我的代码:

  • app.js

    const express = require('express');
    const app = express();
    
    app.get('/', (req, res) => {
      res.status(200).send('Hello, world!').end();
    });
    
    app.get('/admin', function(req, res){
    	res.status(200).send('Hello, admin!').end();
    });
    
    
    // Start the server
    const PORT = process.env.PORT || 8080;
    app.listen(PORT, () => {
      console.log(`App listening on port ${PORT}`);
      console.log('Press Ctrl+C to quit.');
    });
  • app.yaml

    runtime: nodejs
    env: flex
    
    handlers:
    - url: /
      script: app.js
      
    - url: /admin
      login: admin
      script: app.js
  • cron.yaml

    cron:
    - description: daily summary job
      url: /admin
      schedule: every 12 mins
      target: default

结果: cron failure

关于我缺少什么的任何提示?

提前非常感谢

【问题讨论】:

    标签: node.js google-app-engine cron


    【解决方案1】:

    handlers 下的 login 设置现在已在 App Engine 柔性环境中弃用。 https://cloud.google.com/appengine/docs/flexible/nodejs/upgrading

    login: admin 应该从您的 app.yaml 中删除。

    您仍然可以通过检查代码中的 X-Appengine-Cron 标头来保护 url。

    app.get('/admin', function(req, res){
        if (req.get('X-Appengine-Cron') !== 'true') {
             return res.status(401).end();
        }
        res.status(200).send('Hello, admin!');
    });
    

    根据docs

    X-Appengine-Cron 标头由 Google App Engine 内部设置。如果您的请求处理程序找到此标头,它可以相信该请求是 cron 请求。如果标头存在于对您的应用的外部用户请求中,则会将其剥离,但来自已登录应用管理员的请求除外,他们可以设置标头以进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 2010-11-08
      • 2017-11-30
      • 2017-12-17
      • 2019-04-14
      • 2015-11-19
      相关资源
      最近更新 更多