[SOLUCIONADO] Autenticacion antes de cargar vista principal


#1

Hola!

Estoy un poco confundido acerca de como funcionan las vistas en el framework7 v2.0.6, según la documentación, puedo configurar un metodo pageBeforeIn o pageMounted que me permite realizar alguna cosa antes de que se muestre en pantalla los componentes como tal, algo así como el constructor de los componentes en angular 5. El problema radica en que esos métodos no se ejecutan en el view-main, es decir que cuando arranca la aplicación y entra a ese view por defecto, esos métodos no se ejecutan, el único que se ejecuta es el pageInit.

He intentado realizar un app.router.navigate, justo después del método apps.view.create(‘view-main’) pero carga mucho antes de que se ejecute el app.router.navigate, por lo que se ve ese cambio entre paginas, cosa que no me sirve!

En resumen lo que quiero hacer es…una vista que antes de cargar, revise si el usuario o no tiene en localstorage un token, si lo tiene lo envía a una pagina que le muestra el contenido de la plataforma o aplicación como tal, de lo contrario lo envía a la pagina de login!

Alguien que ya conozca el framework, me puede orientar de como funciona esto de las vistas o alguna sugerencia de lograr lo que necesito?

Gracias, de antemano!


#2

Hola

Intentaré ayudarte, primero que todo bienvenido al foro.

Usas Phonegap?


#3

Asi es, uso phonegap version 7.1.1 en linux!


#4

Hola

Las vista principal es necesario iniciarla, porque de ella dependen todas las páginas, puedes tener varias vistas que tendrán su propia navegación, historial y configuración.

Si solo vas a usar una vista, te recomiendo que agregues a la vista principal view-init como clase para que se inicie automáticamente cuando esté preparado.

Entiendo que lo que no quieres es que se vea la transición entre páginas de login y la vista cuando están logueados.

En los casos donde he tenido este problema no me importaba ya que al tener el splashscreen y otros efectos no se veía esa transición.

Prueba esto en el callback deviceready y debería quedar así:

document.addEventListener('deviceready', function(){
	if(!localStorage.getItem("token")) {
		app.router.navigate("/login/");
        return;
	}
...
...

Tienes que crear una ruta que sea /login/ para que funcione.

Eso pasará en cuanto el dispositivo esté preparado, el problema es que para iniciar otra vista necesitas que Framework7 esté iniciado…

Tal vez dependiendo de ese condicional inicializar una vista u otra podría funcionar, si publicas algo de código para que pueda ver, tal vez pueda hacer una prueba y te cuento.

Supongo que lo habrás visto ya pero te dejo este enlace http://framework7.io/docs/view.html#linking-between-pages-views

Saludos


#5

Gracias, por tu ayuda, te paso los enlaces de mis archivos, porque no se como insertar codigo aqui:
efos.js: https://codeshare.io/aJl9YK
index.html : https://codeshare.io/5OBnY0
routes.js: https://codeshare.io/5z7rek

Ya le hice las modificacion, con tus sugerencias, pero aun sigue mostrandose el mainview antes que el login :frowning:

Se me ha ocurrido que se puede iniciar el mainview con una animacion tipo preloader y que en su metodo pageInit haga esa validacion y despues ya cargue el formulario de login o en su defecto la aplicacion como tal…solo se me ocurrio pero no se si exista otra solucion.


#6

Hola

Tienes la función de deviceready, coloca el código ahí, debería quedar así.

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    if(!localStorage.getItem("token")) {
        app.router.navigate('/login-screen/', {'animate': false, 'reloadCurrent': true});
    }
    StatusBar.overlaysWebView(false);
    app.router.navigate("/login-screen/");
    //StatusBar.styleLightContent()
    //StatusBar.hide();  
    navigator.vibrate(3000);
}

Esto hará que en cuanto el dispositivo esté preparado mostrará la página de login si el localstorage “token” no existe.

También debes pensar, si usas un splashscreen esto pasara por detrás del splash, también que la mayoría de las veces el usuario estará logueado por lo que la primera vista debería ser la aplicación como tal, y en el caso de que no esté logueado que será la primera vez puede hacer la apertura de la página de login, eliminas los eventos de esa página para que el usuario no pueda volver a atrás.

El mainview se tiene que iniciar porque es ahí donde se va a mostrar la página de login, debe estar visible y existir.

Prueba y me cuentas.

Saludos


#7

Ya lo intente, pero aun sigue viendose esa transición…no quisiera usar el plugin de splashscreen porque quisiera tener una animación de bienvenida mas compleja!

Lo he solucionando mostrando como primer pagina la animación mientras hace la validación y después redirecciona a la pantalla correcta!


#8

Ok Entonces doy como solucionado este tema

Saludos