2017-07-04 61 views
0

我正在開發移動應用程序,並且需要確定用戶何時正確登錄才能發送到主頁,否則用戶只能看到登錄頁面。確定何時將用戶發送至家中,如果登錄正確

我user.ts(供應商)

import { Injectable } from '@angular/core'; 
import { Http, URLSearchParams } from '@angular/http'; 
import { api } from '../../config/url.api'; 
import { Observable } from "rxjs/Rx" 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/toPromise'; 

import { AlertController, Platform } from 'ionic-angular'; 

// Plugin storage 
import { Storage } from '@ionic/storage'; 

@Injectable() 
export class User { 

    user_id: string; 
    user_firstname: string; 

    constructor(public http: Http, private alertCtrl: AlertController, private platform: Platform, private storage: Storage) { 

    // Cargamos el storage con datos almacenados 
    this.load_storage(); 

    } 

    login_user(US_EMAIL: string, US_PASSWD: string){ 

    let data = new URLSearchParams(); 

    data.append("Usuario_app[US_EMAIL]", US_EMAIL); 
    data.append("Usuario_app[US_PASSWD]", US_PASSWD); 

    let url = "/api" + "/usuario_app/acceso"; // Cambiame en los builds 

    return this.http.post(url, data) 
    .map(resp => { 
     let data_resp = resp.json(); 
     console.log(data_resp); 

     if(data_resp.ResponseError) { 

     // Si el JSON retorna error al enviar datos a la API, mostramos una alerta 
     this.alertCtrl.create({ 
      title: "Error", 
      message: data_resp.ResponseError, 
      buttons: ["Aceptar"] 
     }).present(); 

     console.log('Hubo un error al iniciar sesión'); 

     } else { 
     // El JSON retornó sin errores 
     this.user_id = data_resp.USUARIO.US_ID; 
     this.user_firstname = data_resp.USUARIO.US_NOMBRE; 

     // Almacenamos la ID del usuario 
     this.save_storage(); 

     console.log('Sesión inciada con éxito, se guardó en el storage'); 
     } 
    }) 
    } 

    remove_user(){ 

    this.user_id = null; 

    // guardar storage 
    this.save_storage(); 

    } 

    private save_storage(){ 

    if(this.platform.is("cordova")){ 

     // En el dispositivo 
     this.storage.set('user_id', this.user_id); 

    } else { 

     // En el Computador 
     if(this.user_id){ 
     localStorage.setItem("user_id", this.user_id ); 
     console.log('Guardé el user_id: ' + this.user_id); 
     } else { 
     localStorage.removeItem("user_id"); 

     console.log('Borré de tu local el usuario'); 
     } 
    } 
    } 

    load_storage(){ 

    let promise = new Promise((resolve, reject) => { 

     if(this.platform.is("cordova")){ 

     // dispositivo 
     this.storage.ready() 
     .then(() => { 
      this.storage.get("user_id") 
      .then(user_id => { 
      if(user_id) { 
       this.user_id = user_id; 
      } 
      resolve(); 
      }) 
     }) 
     } else { 
     // computadora 
     if(localStorage.getItem("user_id")){ 
      //Existe items en el localstorage 
      this.user_id = localStorage.getItem("user_id"); 
      console.log('Cargué el user_id: ' + this.user_id); 
     } 
     resolve(); 
     } 
    }); 

    return promise; 
    } 
} 

好了,所以,當用戶在登錄頁面,有兩個選擇

  • 登錄成功地 - >返回首頁
  • 登錄不正確的 - >再試一次

我嘗試了一些片段,但用戶在登錄不正確時也回家了

我login.ts(頁)

import { Component } from '@angular/core'; 
import { IonicPage, NavController, NavParams, LoadingController } from 'ionic-angular'; 
// import * as CryptoJS from 'crypto-js'; 
// import CryptoJS from 'crypto-js'; 
import * as sha1 from 'js-sha1'; 

import { User } from "../../providers/user/user"; 

import { HomePage } from '../../pages/home/home'; 

@IonicPage() 
@Component({ 
    selector: 'page-login', 
    templateUrl: 'login.html', 
}) 
export class LoginPage { 

    US_EMAIL: string = ""; 
    US_PASSWD: string = ""; 

    constructor(public navCtrl: NavController, public navParams: NavParams, private user: User, private loadingCtrl: LoadingController) { 
    // console.log('Mensaje encriptado ' + sha1('Hola soy un mensaje encriptado')); 
    } 

    login(){ 

    // Envía la password encriptada en SHA1 
    this.user.login_user(this.US_EMAIL, sha1(this.US_PASSWD)) 
    .subscribe(() => { 

     // Acá tendría que discriminar si enviar o no al usuario al home siempre cuando haya validado su inicio de sesión 

     // console.log('Encripté tu contraseña: ' + sha1(this.US_PASSWD)); 

    }) 
    } 
} 

在前進,謝謝!

回答