Jump to content

ReDirección login en inicio


juancho300000

Recommended Posts

Hola compañer@s, soy nuevo en prestashop y me han salido unos problemillas que no consigo solucionar.

He creado un override

class FrontController extends FrontControllerCore
{
    public function init()
    {
        parent::init();

                   
                   
        if ($this->php_self != 'authentication' && !$this->context->customer->isLogged() && $this->php_self != 'password') {
Tools::redirect('index.php?controller=authentication?back=my-account');
}                   
                
                   
                   
    }
}

que funciona perfecto en el home, a modo de tienda privada, le doy a crear cuenta nueva, relleno los datos, le doy a guardar y me sale este error

SyntaxError: Unexpected end of JSON input

si quito el override funciona perfecto, la intención es que una vez creada la cuenta funcione con normalidad

pero me esta volviendo loco...

Link to comment
Share on other sites

  • juancho300000 changed the title to ReDirección login en inicio

No puedes hacer un override del init() del FrontController, ya que ese controlador se utiliza para muchas cosas (entre ellas peticiones AJAX y carga de recursos), y si cada vez que se va a utilizar ese controlador y se inicializa haces una redirección, es normal que te salga cualquier tipo de error.

Concretamente, el error que comentas supongo que es porque alguna petición AJAX espera un JSON y le estás haciendo una redirección. Pero vamos, que podrían ser un montón más de errores, porque el planteamiento que usas es incorrecto.

Link to comment
Share on other sites

me imagino que es asi, es lo que encuentro investigando por ahi, lo que necesito es que la pagina funcione como privada, que aparezca el login o crear cuenta al inicio, que con eso funciona bien, pero a la hora de crear la cuenta me da ese error, cualquier consejo o ayuda será bien recibida

Link to comment
Share on other sites

58 minutes ago, juancho300000 said:

me imagino que es asi, es lo que encuentro investigando por ahi, lo que necesito es que la pagina funcione como privada, que aparezca el login o crear cuenta al inicio, que con eso funciona bien, pero a la hora de crear la cuenta me da ese error, cualquier consejo o ayuda será bien recibida

Yo lo haría editando las vistas , por ejemplo en el header.tpl. Comprobar ahí si el usuario está logueado, y si no es así, redirigirle a la página de login o hacer lo que se quiera (lo ideal sería crear un pop-up para loguearse y mostrarlo) .

Edited by Prestafan33 (see edit history)
Link to comment
Share on other sites

Just now, Prestafan33 said:

Yo lo haría editando las vistas , por ejemplo en el header.tpl. Comprobar ahí si el usuario está logueado, y si no es así, redirigirle a la página de login o hacer lo que se quiera (lo ideal sería crear un pop-up para loguearse y mostrarlo) .

si el caso es que ahora funciona perfectamente, pero al crear una cuenta, al darle guardar, salta el error y no guarda, la redireccion es correcta, eso funciona pero no se porqué al final salta ese error

Link to comment
Share on other sites

A ver, el error de planteamiento es que no puedes extender el FrontController para que haga una redirección en el método "init", ya que ese método se ejecuta cada vez que se crea un objeto de esa clase, y además todos los controladores de Prestashop descienden de esa clase, y esos controladores se utilizan para todas las operaciones de la tienda, algunas de ellas son cargar archivos CSS, Javascript o recibir y resolver peticiones AJAX. Por tanto, si les colocas una redirección en medio gran parte de las operaciones van a producir errores y no van a funcionar como deben.

Normalmente te funciona porque una vez que el usuario se ha logueado ya la redirección no se produce, pero hablando claro, es una chapuza, y hay altísimas probabilidades de que falle al producir cualquier operación importante de la tienda.

Por poner un símil, es como si estuvieras cortando y poniendo un desvío en medio de una carretera para enviar por un camino de cabras bicicletas. La bicicleta pasará, pero por la misma carretera vendrán coches y camiones que se quedarán atascados en medio del camino, porque por ahí no pueden pasar. Pues es lo que estás haciendo.

Edited by Prestafan33 (see edit history)
Link to comment
Share on other sites

5 minutes ago, Prestafan33 said:

A ver, el error de planteamiento es que no puedes extender el FrontController para que haga una redirección en el método "init", ya que ese método se ejecuta cada vez que se crea un objeto de esa clase, y además todos los controladores de Prestashop descienden de esa clase, y esos controladores se utilizan para todas las operaciones de la tienda, algunas de ellas son cargar archivos CSS, Javascript o recibir y resolver peticiones AJAX. Por tanto, si les colocas una redirección en medio gran parte de las operaciones van a producir errores y no van a funcionar como deben.

Normalmente te funciona porque una vez que el usuario se ha logueado ya la redirección no se produce, pero hablando claro, es una chapuza, y hay altísimas probabilidades de que falle al producir cualquier operación importante de la tienda.

Por poner un símil, es como si estuvieras cortando y poniendo un desvío en medio de una carretera para enviar por un camino de cabras bicicletas. La bicicleta pasará, pero por la misma carretera vendrán coches y camiones que se quedarán atascados en medio del camino, porque por ahí no pueden pasar. Pues es lo que estás haciendo.

muy bien, lo entiendo, ¿me puedes ayudar?

Link to comment
Share on other sites

13 hours ago, Prestafan33 said:

Si quieres extender la clase FrontController, yo haría esto:


class FrontController extends FrontControllerCore
{
  public $auth = true;
}

No hace falta nada más.

muchas gracias por tu ayuda y entiendo lo que me quieres decir, a veces las soluciones pueden ser mas sencillas de lo que uno piensa, te agradezco muchisimo el esfuerzo de contestarme e intentar ayudarme, gracias. 

He puesto eso quitando lo anterior y aunque funciona perfecto en lo que es mostrarse, a la hora de crear la cuenta pasa exactamente lo mismo al llegar al boton y darle a guardar "SyntaxError: Unexpected end of JSON input", he borrado la caché y nada, si quito el override funciona perfecto, me hace la cuenta sin problema, la verdad es que es un poco frustante

Link to comment
Share on other sites

algo que me ayudaria seria saber cual es la zona o pagina que termina el registro porque por lo que estoy viendo la ultima parte ni es autentificación ni nada que reconozca, por eso da ese error, porque en la página donde tiene que finalizar el guardado la redirecciona antes de entrar

 

Link to comment
Share on other sites

bueno, al final pude solucionar en 1.7.6 y es volviendo a poner lo mismo que al principio, lo que me dijiste que no era correcto pero ahora funciona perfecto añadiendo un par de preguntas al if

override/classes/controllers/FrontController.php
    public function init()
    {
        parent::init();
                if (!$this->context->customer->isLogged() && Tools::getValue('controller') != 'authentication' &&  $this->php_self != 'password' && !Tools::isSubmit('create_account') && Tools::getValue('controller') != 'contact' && !Tools::isSubmit('submitCreate')) {
            Tools::redirect('index.php?controller=authentication?back=my-account');
                   }
    }

lo de contact es porque ademas de login hay un buzon de sugerencias que si no pongo eso me redirecciona antes de entrar, ahora todo funciona bien y no da errores ninguno.

no he encontrado otra manera de poder hacerlo, si se te ocurre alguna manera, estaré encantado de aprenderlo

gracias

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...