为了账号安全,请及时绑定邮箱和手机立即绑定

Firebase:无法验证 MAC

Firebase:无法验证 MAC

Go
芜湖不芜 2022-01-17 10:39:47
我正在使用来自 zabawaba99 的 fireauth 和firego。将数据推送到我的 firebase 数据库时出现错误(请参见下文)。我一直在关注他的例子,但我无法让它发挥作用。有人知道为什么会这样吗?错误:2016/06/03 14:30:13 {  "error" : "Failed to validate MAC."}代码:gen := fireauth.New("<API-KEY/SECRET>")data := fireauth.Data{"uid": "1"}token, err := gen.CreateToken(data, nil)if err != nil {    log.Fatal(err)}fb := firego.New("https://myapp.firebaseio.com" , nil)log.Println(token)fb.Auth(token)for i := 0; i<len(items); i++  {    item := items[i]    pushedItem, err := fb.Child("items").Push(items)    if err != nil {        log.Fatal(err) // error is happening here    }    var itemTest string    if err := pushedItem.Value(&itemTest); err != nil {        log.Fatal(err)    }    fmt.Printf("%s: %s\n", pusedItem, itemTest)}
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

不幸的是,没有 Go 特定的文档,但我相信,基于新文档,旧的 REST 身份验证方式不再适用。话虽如此,我已经能够让您的代码工作,阅读一堆文档,大量试验和错误,并通过 JWT 使用 OAuth 身份验证。


首先,请遵循本指南:https : //firebase.google.com/docs/server/setup,但只是“将 Firebase 添加到您的应用程序”部分。


发出一个go get -u golang.org/x/oauth2和go get -u golang.org/x/oauth2/google(或使用您最喜欢的销售方式)。


更改您的代码,如下所示:


package main


import (

    "fmt"

    "io/ioutil"

    "log"


    "github.com/zabawaba99/firego"

    "golang.org/x/oauth2"

    "golang.org/x/oauth2/google"

)


func main() {

    jsonKey, err := ioutil.ReadFile("./key.json") // or path to whatever name you downloaded the JWT to

    if err != nil {

        log.Fatal(err)

    }

    conf, err := google.JWTConfigFromJSON(jsonKey, "https://www.googleapis.com/auth/userinfo.email",

    "https://www.googleapis.com/auth/firebase.database")

    if err != nil {

        log.Fatal(err)

    }


    client := conf.Client(oauth2.NoContext)


    fb := firego.New("https://myapp.firebaseio.com" , client)


    for i := 0; i<len(items); i++  {

        item := items[i]


        pushedItem, err := fb.Child("items").Push(items)

        if err != nil {

            log.Fatal(err) // error is happening here

        }


        var itemTest string

        if err := pushedItem.Value(&itemTest); err != nil {

            log.Fatal(err)

        }


        fmt.Printf("%s: %s\n", pusedItem, itemTest)


    }

}

以上对我有用!


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信