2015-10-18 28 views
5

golangのリモートmongodbサーバーに接続し、データベースにデータを追加しようとしています。それは私に次のようなエラーを与えます: SASL認証ステップでサーバーがエラーを返しました:認証に失敗しました。リモートmongodbサーバーへの接続がgolangで失敗し、認証エラーが発生しました

コード:

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) 

} 

この上の任意のヘルプは高く評価されます。あなたが使用して認証する必要がデータベース上.Login(user, pass string)を呼び出す必要が

+0

にもありますが必ず*あなたの資格情報が正しい*ていますか?それをエディタにコピーした後にスペースや書式はありませんか?ドライバに接続する際にエラーが発生した場合、プログラムは続行します(その場合は 'log.Fatal(err)'になるはずです) – elithrar

+0

私はコードに資格情報を入れませんでしたが、はユーザー名とパスワードです。 mongodb:// @ ds041154.mongolab.com:41154/location 'という形式をmongodb onlineで作成しました。 – anonymus

+0

@elithrar私の資格情報も正しいですが、私は '認証失敗'エラーを 'mgo.Dial' – Thellimist

答えて

4

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

これはsessionを認証することに注意してくださいので、お互いのセッションあなた.Copy().Clone()それからも認証されます。

4

同様のエラーが発生しましたが、間違ったログイン資格情報を入力したことがわかりました。

このコードは、私の仕事:

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

それはGithub

関連する問題