Go和Redisgo:DialURL错误:NOAUTH需要身份验证

huangapple go评论87阅读模式
英文:

Go and Redisgo: DialURL error: NOAUTH Authentication required

问题

我正在尝试使用Go和redigo连接到我的Redis服务器,使用的是在另一个使用lettuce编写的Java应用程序中有效的URI。在Go项目中,我遇到了以下错误:

> NOAUTH 需要身份验证。

我的redis.conf文件中设置了requirepass true,并且我在URI中传递了密码。以下是我的连接方式:

conn, err := redis.DialURL("redis://MySecurePassword@localhost:6666/0")
	if err != nil {
		log.Fatal("无法连接到Redis")
	}

这里没有错误。当我尝试运行一个检索数据的命令时,出现了错误。

writeOrErr(&b, conn, "HGETALL", "mykey")

// 用于将结果写入缓冲区或报告错误的redis.Conn.Do的包装器
func writeOrErr(b *bytes.Buffer, conn redis.Conn, cmd string, key string) string {
	result, err := conn.Do(cmd, key)
	if err != nil {
        // !!! 错误发生在这里 !!!
		log.Fatalf("无法运行 %s \"%s\" | 错误: %s", cmd, key, err.Error())
	}

	// 检索数据
	_, err = b.WriteString(result.(string))
	if err != nil {
		log.Fatal("无法将结果写入字符串中:" + key)
	}

	return result.(string)
}

我是否错误地使用了redigo的API?我该如何使其连接成功?

英文:

I'm trying to connect to my Redis server using Go and redigo with a URI that works on another application, written in Java with lettuce. On the Go project, I'm getting the error

> NOAUTH Authentication required.

My redis.conf has requirepass true, and I pass the password in the URI. Here's how I connect:

conn, err := redis.DialURL("redis://MySecurePassword@localhost:6666/0")
	if err != nil {
		log.Fatal("Not able to connect to Redis")
	}

No errors there. The error shows when I try to run a command to retrieve data.

writeOrErr(&b, conn, "HGETALL", "mykey")

// Wrapper for redis.Conn.Do that writes the result to a buffer or reports the error
func writeOrErr(b *bytes.Buffer, conn redis.Conn, cmd string, key string) string {
	result, err := conn.Do(cmd, key)
	if err != nil {
        // !!! THE ERROR HAPPENS HERE !!!
		log.Fatalf("Couldn't run %s \"%s\" | Error: %s", cmd, key, err.Error())
	}

	// Retrieve data
	_, err = b.WriteString(result.(string))
	if err != nil {
		log.Fatal("Couldn't write result to string for " + key)
	}

	return result.(string)
}

Am I using redigo's API improperly? How can I make it connect?

答案1

得分: 1

URL不符合redis URI scheme specification。userinfo字段应该采用"user:password"的格式。

英文:

The URL does not match the redis URI scheme specification. The userinfo field should be in the format "user:password"

huangapple
  • 本文由 发表于 2017年3月16日 04:57:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/42820547.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定