Firebase:无法验证MAC

时间:2016-06-03 12:46:45

标签: go firebase firebase-authentication

我正在使用来自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 个答案:

答案 0 :(得分:2)

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

首先,请按照以下指南操作:https://firebase.google.com/docs/server/setup,但只需添加Firebase到您的应用中即可。部分。

发出go get -u golang.org/x/oauth2go 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)

    }
}

以上对我有用!

编辑:添加对帮助我的StackOverflow答案的引用: