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));
})
}
}
在前進,謝謝!