2015-10-18 17 views
5

Tôi đang cố gắng kết nối với máy chủ mongodb từ xa trong golang và thêm dữ liệu vào cơ sở dữ liệu. Nó cho tôi lỗi như sau: máy chủ trả về lỗi trên bước xác thực SASL: Xác thực không thành công.kết nối với máy chủ mongodb từ xa thất bại trong golang, đưa ra lỗi xác thực

Code:

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) 

} 

Bất kỳ giúp đỡ về vấn đề này được đánh giá cao.

+0

Bạn có chắc chắn * * thông tin của bạn là chính xác? Không có dấu cách/định dạng dấu sao từ việc sao chép nó vào trình soạn thảo của bạn? Lưu ý rằng chương trình của bạn chỉ tiếp tục nếu có lỗi kết nối với trình điều khiển (có thể là 'log.Fatal (err)' trong trường hợp đó) – elithrar

+0

tôi chưa đặt thông tin đăng nhập vào mã nhưng : là tên người dùng và mật khẩu. Tôi có định dạng này 'mongodb: // : @ ds041154.mongolab.com: 41154/location' bằng cách tạo mongodb trực tuyến. – anonymus

+0

@elithrar Thông tin đăng nhập của tôi cũng chính xác nhưng tôi nhận được lỗi 'auth failed' gọi' mgo.Dial' – Thellimist

Trả lời

4

Bạn cần phải gọi .Login(user, pass string) trên cơ sở dữ liệu bạn cần phải xác thực với:

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

Lưu ý rằng điều này xác nhận sự session, vì vậy mỗi lần khác bạn .Copy() hoặc .Clone() từ nó cũng được chứng thực.

4

Tôi đã nhận được lỗi tương tự, nhưng tôi thấy rằng tôi đã nhập thông tin đăng nhập sai.

Mã này việc cho tôi:

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

Nó cũng là trên Github

Các vấn đề liên quan