猿问

Firebase:无法验证 MAC

我正在使用来自 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)


}


芜湖不芜
浏览 142回答 1
1回答

MMTTMM

不幸的是,没有 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 mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "io/ioutil"&nbsp; &nbsp; "log"&nbsp; &nbsp; "github.com/zabawaba99/firego"&nbsp; &nbsp; "golang.org/x/oauth2"&nbsp; &nbsp; "golang.org/x/oauth2/google")func main() {&nbsp; &nbsp; jsonKey, err := ioutil.ReadFile("./key.json") // or path to whatever name you downloaded the JWT to&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; log.Fatal(err)&nbsp; &nbsp; }&nbsp; &nbsp; conf, err := google.JWTConfigFromJSON(jsonKey, "https://www.googleapis.com/auth/userinfo.email",&nbsp; &nbsp; "https://www.googleapis.com/auth/firebase.database")&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; log.Fatal(err)&nbsp; &nbsp; }&nbsp; &nbsp; client := conf.Client(oauth2.NoContext)&nbsp; &nbsp; fb := firego.New("https://myapp.firebaseio.com" , client)&nbsp; &nbsp; for i := 0; i<len(items); i++&nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; item := items[i]&nbsp; &nbsp; &nbsp; &nbsp; pushedItem, err := fb.Child("items").Push(items)&nbsp; &nbsp; &nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.Fatal(err) // error is happening here&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; var itemTest string&nbsp; &nbsp; &nbsp; &nbsp; if err := pushedItem.Value(&itemTest); err != nil {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.Fatal(err)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; fmt.Printf("%s: %s\n", pusedItem, itemTest)&nbsp; &nbsp; }}以上对我有用!
随时随地看视频慕课网APP

相关分类

Go
我要回答