XIU2/CloudflareSpeedTest · info
[信息] 缺少配置项 [EMAIL],由 [API 密钥] 方式转为 [API 令牌] 方式!
Error message
[信息] 缺少配置项 [EMAIL],由 [API 密钥] 方式转为 [API 令牌] 方式!
What it means
This is informational, not fatal: when EMAIL is empty in cfst_ddns.conf, _READ() prints the [信息] message at script/cfst_ddns.sh:23 and continues. Empty EMAIL selects the API-token branch: _UPDATE() sends Authorization: Bearer ${KEY} (lines 54-59) instead of the X-Auth-Email/X-Auth-Key global-key pair (lines 47-53).
Source
Thrown at script/cfst_ddns.sh:23
# 项目: CloudflareSpeedTest 自动更新域名解析记录
# 版本: 1.0.5
# 作者: XIU2
# 项目: https://github.com/XIU2/CloudflareSpeedTest
# --------------------------------------------------------------
_READ() {
[[ ! -e "cfst_ddns.conf" ]] && echo -e "[错误] 配置文件不存在 [cfst_ddns.conf] !" && exit 1
CONFIG=$(cat "cfst_ddns.conf")
FOLDER=$(echo "${CONFIG}"|grep 'FOLDER='|awk -F '=' '{print $NF}')
[[ -z "${FOLDER}" ]] && echo -e "[错误] 缺少配置项 [FOLDER] !" && exit 1
ZONE_ID=$(echo "${CONFIG}"|grep 'ZONE_ID='|awk -F '=' '{print $NF}')
[[ -z "${ZONE_ID}" ]] && echo -e "[错误] 缺少配置项 [ZONE_ID] !" && exit 1
DNS_RECORDS_ID=$(echo "${CONFIG}"|grep 'DNS_RECORDS_ID='|awk -F '=' '{print $NF}')
[[ -z "${DNS_RECORDS_ID}" ]] && echo -e "[错误] 缺少配置项 [DNS_RECORDS_ID] !" && exit 1
KEY=$(echo "${CONFIG}"|grep 'KEY='|awk -F '=' '{print $NF}')
[[ -z "${KEY}" ]] && echo -e "[错误] 缺少配置项 [KEY] !" && exit 1
EMAIL=$(echo "${CONFIG}"|grep 'EMAIL='|awk -F '=' '{print $NF}')
[[ -z "${EMAIL}" ]] && echo -e "[信息] 缺少配置项 [EMAIL],由 [API 密钥] 方式转为 [API 令牌] 方式!"
TYPE=$(echo "${CONFIG}"|grep 'TYPE='|awk -F '=' '{print $NF}')
[[ -z "${TYPE}" ]] && echo -e "[错误] 缺少配置项 [TYPE] !" && exit 1
NAME=$(echo "${CONFIG}"|grep 'NAME='|awk -F '=' '{print $NF}')
[[ -z "${NAME}" ]] && echo -e "[错误] 缺少配置项 [NAME] !" && exit 1
TTL=$(echo "${CONFIG}"|grep 'TTL='|awk -F '=' '{print $NF}')
[[ -z "${TTL}" ]] && echo -e "[错误] 缺少配置项 [TTL] !" && exit 1
PROXIED=$(echo "${CONFIG}"|grep 'PROXIED='|awk -F '=' '{print $NF}')
[[ -z "${PROXIED}" ]] && echo -e "[错误] 缺少配置项 [PROXIED] !" && exit 1
}
_UPDATE() {
# 这里可以自己添加、修改 CFST 的运行参数
./cfst -o "result_ddns.txt"
# 判断结果文件是否存在,如果不存在说明结果为 0
[[ ! -e "result_ddns.txt" ]] && echo "CFST 测速结果 IP 数量为 0,跳过下面步骤..." && exit 0
CONTENT=$(sed -n "2,1p" result_ddns.txt | awk -F, '{print $1}')View on GitHub (pinned to 1da0c025d7)
Solutions
- If you use an API Token: nothing to fix — verify the token has Zone -> DNS -> Edit rights on the zone and that KEY holds the token
- If you use the Global API Key: add EMAIL=you@example.com and set KEY to the 37-character global key from My Profile -> API Tokens
- Confirm the mode by checking which curl branch runs (Bearer vs X-Auth-* headers) or the Cloudflare API response
Example fix
# cfst_ddns.conf (before, token mode) EMAIL= KEY=<api-token> # (after, global-key mode) EMAIL=you@example.com KEY=<37-char-global-key>
Defensive patterns
Strategy: validation
Validate before calling
email=$(grep '^EMAIL=' cfst_ddns.conf | head -1 | cut -d= -f2-) key=$(grep '^KEY=' cfst_ddns.conf | head -1 | cut -d= -f2-) [ -z "$email" ] && echo 'token mode: KEY must be an API Token with Zone.DNS Edit' >&2 [ -n "$email" ] && echo 'global-key mode: KEY must be the Global API Key' >&2
Prevention
- Pick the auth mode deliberately: token mode = leave EMAIL empty; global-key mode = set both EMAIL and KEY
- For tokens, create it with Zone -> DNS -> Edit scoped to the one zone, then verify with /user/tokens/verify
- Test the exact curl the script will run (Bearer vs X-Auth-*) once before automating
When it happens
Trigger: EMAIL= line absent, commented, or empty in cfst_ddns.conf; the script never exits for this — it only switches the authentication mode of the Cloudflare API PUT.
Common situations: Intentional setup with a scoped API Token (no email needed); accidental omission when the user only has a Global API Key, which then fails later with HTTP 403/400 on the PUT because a global key was sent as a Bearer token.
Related errors
- [错误] 缺少配置项 [FOLDER] !
- [错误] 缺少配置项 [ZONE_ID] !
- [错误] 缺少配置项 [DNS_RECORDS_ID] !
- [错误] 缺少配置项 [KEY] !
- [错误] 缺少配置项 [TYPE] !
AI-assisted analysis of XIU2/CloudflareSpeedTest@1da0c025d7 (2026-08-15).
Data as JSON: /api/errors/31937638f1aa8ea9.
Report an issue: GitHub.