我正在谷歌应用引擎中使用安全网址的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
对我遗失的内容有何提示?
提前多多感谢
答案 0 :(得分:2)
App Engine灵活环境现已弃用login
下的handlers
设置。
https://cloud.google.com/appengine/docs/flexible/nodejs/upgrading
login: admin
应从app.yaml中移除。
您仍然可以通过检查代码中的X-Appengine-Cron标头来保护网址。
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请求。如果标题存在于应用程序的外部用户请求中,则会被删除,但应用程序的已登录管理员的请求除外,这些请求允许设置标题以用于测试目的。