2016-06-03 2 views
0

zabawaba99의 fireauth 및 firego를 사용 중입니다. 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

불행하게도이되지 가기 관련 문서,하지만, 새로운 문서를 기반으로, 믿는 이전 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의 답변에 추가 참조 :

+0

당신은 놀라운! 대단히 감사합니다 !! – tom12e

관련 문제