2015-10-18 4 views
5

Próbuję połączyć się ze zdalnym serwerem mongodb w golang i dodając dane w bazie danych. To daje mi błąd w następujący sposób: serwer zwrócił błąd w kroku uwierzytelniania SASL: uwierzytelnianie nie powiodło się.połączenie do zdalnego serwera mongodb nie powiodło się w golangu, dając błąd uwierzytelniania

Kod:

package main 

import (
    "fmt" 
    "gopkg.in/mgo.v2" 
    "gopkg.in/mgo.v2/bson" 
    "log" 
    // "os" 
) 

type Person struct { 
    Name string 
    Phone string 
} 

func main() { 

    session, err := mgo.Dial("mongodb://<dbuser>:<dbpassword>@ds041154.mongolab.com:41154/location") 

    if err != nil { 
     fmt.Println(err) 
    } else { 
     fmt.Println("Session created") 
    } 

    // Optional. Switch the session to a monotonic behavior. 
    session.SetMode(mgo.Monotonic, true) 

    c := session.DB("location").C("people") 
    err = c.Insert(&Person{"Ale", "+55 53 8116 9639"}, 
     &Person{"Cla", "+55 53 8402 8510"}) 
    if err != nil { 
     log.Fatal(err) 
    } 

    result := Person{} 
    err = c.Find(bson.M{"name": "Ale"}).One(&result) 
    if err != nil { 
     log.Fatal(err) 
    } 

    fmt.Println("Phone:", result.Phone) 

} 

Każda pomoc w tej sprawie jest doceniana.

+0

Czy na pewno * * Twoje dane są prawidłowe? Brak spacji/formatowania przed skopiowaniem go do edytora? Zauważ, że twój program jest kontynuowany, jeśli wystąpił błąd połączenia ze sterownikiem (prawdopodobnie w tym przypadku powinien to być 'log.Fatal (err)'). – elithrar

+0

Nie umieszczam poświadczeń w kodzie, ale : to nazwa użytkownika i hasło. Mam ten format "mongodb: // : @ ds041154.mongolab.com: 41154/location 'przez tworzenie mongodb online. – anonymus

+0

@elithrar Moje poświadczenia są również poprawne, ale otrzymuję komunikat o błędzie 'auth failed' wywołującym' mgo.Dial' – Thellimist

Odpowiedz

4

Trzeba zadzwonić .Login(user, pass string) w bazie danych trzeba uwierzytelnić:

if err:= session.DB(authDB).Login(user, pass); err != nil { 
    panic(err) 
} 

pamiętać, że ten uwierzytelnia session, więc każdy inny sesji ty .Copy() lub .Clone() ze jest on również uwierzytelnione.

4

Wystąpił podobny błąd, ale stwierdziłem, że wprowadziłem nieprawidłowe dane logowania.

Ten kod pracował dla mnie:

package main 

import (
    "fmt" 
    "time" 

    "gopkg.in/mgo.v2" 
) 

//const MongoDb details 
const (
    hosts  = "ds026491.mongolab.com:26491" 
    database = "messagingdb" 
    username = "admin" 
    password = "youPassword" 
    collection = "messages" 
) 

func main() { 

    info := &mgo.DialInfo{ 
     Addrs: []string{hosts}, 
     Timeout: 60 * time.Second, 
     Database: database, 
     Username: username, 
     Password: password, 
    } 

    session, err1 := mgo.DialWithInfo(info) 
    if err1 != nil { 
     panic(err1) 
    } 

    col := session.DB(database).C(collection) 

    count, err2 := col.Count() 
    if err2 != nil { 
     panic(err2) 
    } 
    fmt.Println(fmt.Sprintf("Messages count: %d", count)) 
} 

Jest również Github