Firebase:无法验证 MAC
Firebase: Failed to validate 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)
}
不幸的是,没有特定于 Go 的文档,但我相信,根据新文档,旧的 REST 身份验证方式不再有效。
话虽如此,我已经能够让你的代码工作阅读一堆文档,大量的试验和错误,并通过 JWT 使用 OAuth 身份验证。
首先,请遵循本指南:https://firebase.google.com/docs/server/setup 但只是 "Add Firebase to your App" 部分。
发布 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)
}
}
以上对我有用!
编辑:添加对帮助我的 Whosebug 答案的引用:
我正在使用 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)
}
不幸的是,没有特定于 Go 的文档,但我相信,根据新文档,旧的 REST 身份验证方式不再有效。 话虽如此,我已经能够让你的代码工作阅读一堆文档,大量的试验和错误,并通过 JWT 使用 OAuth 身份验证。
首先,请遵循本指南:https://firebase.google.com/docs/server/setup 但只是 "Add Firebase to your App" 部分。
发布 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)
}
}
以上对我有用!
编辑:添加对帮助我的 Whosebug 答案的引用: