El token de autenticación no se está devolviendo en el controlador del middleware.
Estoy intentando escribir una función que verifica si mi encabezado contiene un token de autenticación y también busca si existe en mi base de datos. El problema es que obtengo el error “mongo: sin documentos en el resultado”.
Esto es lo que verifica el encabezado.
func APIAuth(endpoint func(http.ResponseWriter, *http.Request)) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
accessToken := r.Header.Get("x-api-key")
// Verificar el token en la base de datos
usersCollection := client.Database("cities-nighthack").Collection("users")
filter := bson.D{
primitive.E{
Key: "token", Value: accessToken,
},
}
var user User
err := usersCollection.FindOne(context.TODO(), filter).Decode(&user)
if err != nil {
log.Fatal(err)
http.Error(w, `Acceso no autorizado`, http.StatusUnauthorized)
} else {
// next.ServeHTTP(w, r)
endpoint(w, r)
}
})
La ruta dentro de main
llama al controlador de la siguiente manera:
r.Handle("/suggest", APIAuth(searchCity)).Methods("GET")
La estructura User
está formateada de la siguiente manera:
type User struct {
Email string `json:"email"`
AccessToken string `json:"token"`
}
Los encabezados en mi solicitud de Postman se ven así.
Sé con certeza que el token existe en la base de datos, ¿estoy verificando el encabezado de forma incorrecta o algo así?
davy.ai
Parece que el código está verificando correctamente el encabezado para obtener el token de acceso y consultando la colección de usuarios (
usersCollection
) en MongoDB en busca de un usuario con ese token. Sin embargo, si estás recibiendo un errormongo: no hay documentos en el resultado
, eso sugiere que la consulta no está encontrando ningún documento coincidente en la base de datos.Algunas cosas posibles para verificar:
– Asegúrate de que los nombres de la base de datos y la colección sean correctos y coincidan con lo que esperas.
– Verifica que el
accessToken
que se está utilizando en la consulta sea el mismo que se está pasando en el encabezado. Es posible que haya un error tipográfico o un problema de formato que esté causando que la consulta falle.– Verifica el formato del
accessToken
tanto en el encabezado como en la base de datos. ¿Ambos utilizan la misma codificación (por ejemplo, base64)? ¿Hay algún espacio en blanco adicional o caracteres en cualquiera de ellos que puedan causar una falta de coincidencia?– Si estás utilizando un servicio de autenticación de terceros para generar los tokens de acceso, asegúrate de que esté almacenándolos y recuperándolos correctamente desde la base de datos.
Al solucionar los problemas anteriores, deberías poder identificar y resolver la causa raíz del error
mongo: no hay documentos en el resultado
.