2016-06-03 4 views
0

Я использую fireauth и firego от zabawaba99. Я получаю сообщение об ошибке (см. Ниже) при нажатии данных в базу данных firebase. Я слежу за его примерами, но я не могу заставить его работать. Кто-то понял, почему это происходит?Firebase: Не удалось проверить MAC

Ошибка:

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) 

} 

ответ

2

К сожалению, не Go конкретной документации, но я считаю, на основе новых документов, что старый REST способ аутентификации не работает. Сказав это, я смог заставить ваш код работать, читая кучу документов, много пробной ошибки & и используя аутентификацию OAuth с помощью JWT.

Во-первых, следуйте этому руководству: 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) 

    } 
} 

выше работал для меня!

Edit: Добавление ссылки на StackOverflow ответы, которые помогли мне:

+0

Вы удивительны! большое большое спасибо!! – tom12e