2015-10-18 17 views
5

Sto provando a connettermi al server mongodb remoto in golang e aggiungendo dati nel database. Mi ha dato errore come segue: il server ha restituito un errore durante la fase di autenticazione SASL: autenticazione fallita.connessione al server mongodb remoto non riuscita in golang, dando errore di autenticazione

Codice:

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) 

} 

Qualsiasi aiuto su questo è apprezzato.

+0

Siete sicuri * * le credenziali sono corrette? Non ci sono spazi finali/formattazione da copiarli nel tuo editor? Nota che il tuo programma continua solo se c'è un errore di connessione al driver (probabilmente dovrebbe essere 'log.Fatal (err)' in quell'istanza) – elithrar

+0

non ho inserito le credenziali nel codice ma : sono username e password. Ho ottenuto questo formato "mongodb: // : @ ds041154.mongolab.com: 41154/location" creando mongodb online. – anonymus

+0

@elithrar Le mie credenziali sono anche corrette ma sto ricevendo errore 'auth failed' che chiama' mgo.Dial' – Thellimist

risposta

4

è necessario chiamare .Login(user, pass string) sul database è necessario autenticarsi con:

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

Si noti che questa autentica l'session, in modo che ogni altra sessione si .Copy() o .Clone() da essa è anche autenticato.

4

Stavo ottenendo errore simile, ma ho scoperto che avevo inserito le credenziali di accesso errate.

Questo codice ha funzionato per me:

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)) 
} 

E 'anche sulla Github

Problemi correlati