es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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"`
}

Encabezados de la solicitud GET de Postman

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í?

Tags:  , ,

Answer

  1. Avatar for 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 error mongo: 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.

Comments are closed.