使用Firebase Hosting API创建自定义域名失败,求Go库及REST解决方案
Firebase Hosting自定义域名自动化创建问题解决(Go库+REST方案)
错误原因分析
你遇到的400: Domain not associated with project错误,核心问题是目标域名test1.example.com还没完成Firebase项目的归属验证。Firebase要求自定义域名必须先通过验证(证明你拥有该域名),才能绑定到Hosting站点,直接调用创建接口会触发这个前置校验错误。
Go开发库修复方案
1. 前置步骤:完成域名验证
你需要先将域名添加到项目的验证列表,并完成DNS配置(添加TXT/CNAME记录)。验证完成后,域名才会被标记为与项目关联。
2. 修正后的代码示例
替换真实的项目ID和站点ID,先校验验证状态再执行创建:
package main import ( "context" "log" "os" "google.golang.org/api/firebasehosting/v1" "google.golang.org/api/googleapi" ) func main() { ctx := context.Background() // 初始化服务,不要忽略错误 firebase, err := firebasehosting.NewService(ctx) if err != nil { log.Fatalf("创建Firebase Hosting服务失败: %v", err) } projectID := "你的真实项目ID" siteID := "dashboard-v1-staging" domainName := "test1.example.com" parentResource := "projects/" + projectID + "/sites/" + siteID // 先检查域名验证状态 verifyReq := &firebasehosting.VerifyDomainRequest{DomainName: domainName} verifyResp, err := firebase.Projects.Sites.Domains.Verify(parentResource, verifyReq).Do() if err != nil { log.Fatalf("域名验证状态检查失败: %v", err) } // 未验证则提示添加DNS记录 if verifyResp.Status != "VERIFIED" { log.Printf("域名%s未验证,请添加以下DNS记录:%+v", domainName, verifyResp.DnsRecords) os.Exit(1) } // 创建域名关联 domain := &firebasehosting.Domain{ DomainName: domainName, Site: parentResource, } _, err = firebase.Projects.Sites.Domains.Create(parentResource, domain).Do() if err != nil { if !googleapi.IsNotModified(err) { log.Fatalf("创建域名关联失败: %v", err) } } log.Printf("域名%s已成功绑定到站点%s", domainName, siteID) }
纯REST接口替代方案
1. 验证域名归属
- 请求方法:POST
- 请求URL:
https://firebasehosting.googleapis.com/v1/projects/{project-id}/sites/{site-id}/domains:verify - 请求体:
{ "domainName": "test1.example.com" } - 响应会返回需要配置的DNS记录,完成配置后重复调用该接口,直到返回的
status字段为VERIFIED。
2. 创建域名关联
- 请求方法:POST
- 请求URL:
https://firebasehosting.googleapis.com/v1/projects/{project-id}/sites/{site-id}/domains - 请求体:
{ "domainName": "test1.example.com", "site": "projects/{project-id}/sites/{site-id}" } - 注意:请求需携带有效的Google OAuth2令牌,令牌需拥有
firebasehosting.domains.create和firebasehosting.domains.verify权限。
额外注意事项
- 确保操作账号拥有
Firebase Hosting Admin角色权限。 - 父域名验证通过后,其子域名会自动继承验证状态(比如
example.com验证后,test1.example.com无需单独验证)。 - 域名验证状态绑定到具体项目,同一个域名可验证到多个项目,但每个项目需单独完成验证流程。
内容的提问来源于stack exchange,提问作者Alex Pliutau
相关产品推荐
相关产品推荐

