mejora del portal
This commit is contained in:
@@ -35,6 +35,10 @@ func PortalUser(c *fiber.Ctx) (*models.PortalUser, error) {
|
|||||||
// SetPortalSession guarda el portal_user_id en la sesión.
|
// SetPortalSession guarda el portal_user_id en la sesión.
|
||||||
func SetPortalSession(c *fiber.Ctx, userID uint) error {
|
func SetPortalSession(c *fiber.Ctx, userID uint) error {
|
||||||
store := app.Http.Session.Get(c)
|
store := app.Http.Session.Get(c)
|
||||||
|
// Regenerar ID de sesión para evitar session fixation
|
||||||
|
if err := store.Regenerate(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
store.Set(portalSessionKey, userID)
|
store.Set(portalSessionKey, userID)
|
||||||
return store.Save()
|
return store.Save()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,8 +124,11 @@ func GetAllProyectos(limit, offset int, search string) ([]Proyecto, int64, error
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetProyectosByClienteIDs(clienteIDs []uint) ([]Proyecto, error) {
|
func GetProyectosByClienteIDs(clienteIDs []uint) ([]Proyecto, error) {
|
||||||
|
if len(clienteIDs) == 0 {
|
||||||
|
return []Proyecto{}, nil
|
||||||
|
}
|
||||||
var items []Proyecto
|
var items []Proyecto
|
||||||
err := app.Http.Database.DB.Where("cliente_id IN ?", clienteIDs).Order("created_at DESC").Find(&items).Error
|
err := app.Http.Database.DB.Preload("Cliente").Where("cliente_id IN ?", clienteIDs).Order("created_at DESC").Find(&items).Error
|
||||||
return items, err
|
return items, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package controllers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -27,11 +28,14 @@ func PortalLoginPost(c *fiber.Ctx) error {
|
|||||||
password := c.FormValue("password")
|
password := c.FormValue("password")
|
||||||
u, err := models.CheckPortalLogin(email, password)
|
u, err := models.CheckPortalLogin(email, password)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Printf("[PORTAL LOGIN] Fallo para %q: %v", email, err)
|
||||||
return c.Redirect("/portal/login?error=" + url.QueryEscape(err.Error()))
|
return c.Redirect("/portal/login?error=" + url.QueryEscape(err.Error()))
|
||||||
}
|
}
|
||||||
if err := auth.SetPortalSession(c, u.ID); err != nil {
|
if err := auth.SetPortalSession(c, u.ID); err != nil {
|
||||||
|
log.Printf("[PORTAL LOGIN] Error guardando sesión para usuario %d: %v", u.ID, err)
|
||||||
return c.Redirect("/portal/login?error=Error+interno")
|
return c.Redirect("/portal/login?error=Error+interno")
|
||||||
}
|
}
|
||||||
|
log.Printf("[PORTAL LOGIN] OK usuario %d (%s)", u.ID, email)
|
||||||
return c.Redirect("/portal/dashboard")
|
return c.Redirect("/portal/dashboard")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,12 +49,14 @@ func PortalLogout(c *fiber.Ctx) error {
|
|||||||
func PortalDashboard(c *fiber.Ctx) error {
|
func PortalDashboard(c *fiber.Ctx) error {
|
||||||
u := middlewares.PortalUserFromLocals(c)
|
u := middlewares.PortalUserFromLocals(c)
|
||||||
if u == nil {
|
if u == nil {
|
||||||
|
log.Println("[PORTAL DASHBOARD] Usuario no en locals, redirigiendo a login")
|
||||||
return c.Redirect("/portal/login")
|
return c.Redirect("/portal/login")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recargar con accesos
|
// Recargar con accesos
|
||||||
fullUser, err := models.GetPortalUserByID(u.ID)
|
fullUser, err := models.GetPortalUserByID(u.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Printf("[PORTAL DASHBOARD] Error cargando usuario %d: %v", u.ID, err)
|
||||||
return c.Redirect("/portal/login")
|
return c.Redirect("/portal/login")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user