leogtzr / vecin

Administra tu fracc, departamentos, tu calle o tu conjunto de casas
0 stars 0 forks source link

Improve the /logout logic #31

Closed leogtzr closed 5 days ago

leogtzr commented 5 days ago

Se ve todo bastante flaky:

func Logout(w http.ResponseWriter, r *http.Request) {
    if r.Method != http.MethodPost {
        http.Error(w, "Método no permitido", http.StatusMethodNotAllowed)
        return
    }

    store := middleware.GetSessionStore()
    session, err := store.Get(r, "session")
    if err != nil {
        http.Error(w, "Error obteniendo la sesión", http.StatusInternalServerError)
        return
    }

    // Verificar el token CSRF
    csrfToken := r.FormValue("csrf_token")
    if csrfToken != session.Values["csrf_token"] {
        http.Error(w, "Token CSRF inválido", http.StatusForbidden)
        return
    }

    // Clear all the values from session:
    session.Values = make(map[interface{}]interface{})
    session.Options.MaxAge = -1

    err = session.Save(r, w)
    if err != nil {
        http.Error(w, "Error guardando la sesión", http.StatusInternalServerError)
        return
    }

    http.Redirect(w, r, "/login", http.StatusSeeOther)
}

Definitivamente necesita una mejora y convenir en el código cómo debe ser llamada.

leogtzr commented 5 days ago

Además el token csrf_token tiene que ser envíado a los templates de manera apropiada.