0
votes

Problème de connexion et de poteau http en angulaire

J'essaie de mettre en œuvre un système de connexion dans l'application angulaire, mais il redirige à la vue principale et enregistre un objet vide dans le stockage local no mètres ce que j'ai saisi dans la forme, un email et un mot de passe de compte corrects. C'est mon premier vrai projet et la première fois à créer un système de connexion. Uniformément, je n'ai pas la permission de montrer une vraie API ici. Le code:

login.component.html p> xxx pré>

login.component.ts p> xxx pré>

et auth.service .TS P>

import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';
import { throwError, Observable } from 'rxjs';
import { map, catchError } from 'rxjs/operators';

import { Restaurant } from '../models/Restaurant';


@Injectable({
  providedIn: 'root'
})
export class AuthService {

  loginUrl = 'xxxxxxxx';
  errorData: {};

  restaurant: Restaurant;

  constructor(private http: HttpClient) { }

  redirectUrl: string;

  login(email: string, password: string) {
    var postData = "email=" + email + "&password=" + password;
    return this.http.post<Restaurant>(this.loginUrl, postData)
    .pipe(map(restaurant => {
        if (restaurant) {
          localStorage.setItem('currentRestaurant', JSON.stringify(restaurant));
        }
      }),
      catchError(this.handleError)
    );
  }


  isLoggedIn() {
    if (localStorage.getItem('currentRestaurant')) {
      return true;
    }
    return false;
  }

  getAuthorizationToken() {
    const currentRestaurant = JSON.parse(localStorage.getItem('currentRestaurant'));
    return currentRestaurant.token;
  }

  logout() {
    localStorage.removeItem('currentRestaurant');
  }

  private handleError(error: HttpErrorResponse) {
    if (error.error instanceof ErrorEvent) {

      // A client-side or network error occurred. Handle it accordingly.
      console.error('An error occurred:', error.error.message);
    } else {

      // The backend returned an unsuccessful response code.
      // The response body may contain clues as to what went wrong.
      console.error(`Backend returned code ${error.status}, ` + `body was: ${error.error}`);
    }

    // return an observable with a user-facing error message
    this.errorData = {
      errorTitle: 'Oops! Request for document failed',
      errorDesc: 'Something bad happened. Please try again later.'
    };
    return throwError(this.errorData);
  }
}


0 commentaires

3 Réponses :


0
votes

Vos données de poste doivent être telles que var postdata = {e-mail: email, mot de passe: mot de passe}, mais vous avez décrit obtenir une demande avec les paramètres de requête. Économiser également des données dans le flux de données observable est une mauvaise pratique. Chaque nouvel abonné déclenche à nouveau l'exécution de ce code xxx


3 commentaires

Quand je l'ai essayé, sur la console, je reçois "Impossible de lire le courrier" de la propriété "de non défini"


Cela signifie que des exceptions sont ici console.log (cela.AuthService.Restaurant.Email); La valeur du restaurant n'est pas définie pour Authservice.


Elso console.log (cela.AuthService.restaurant.Email) devrait être à l'intérieur de la souscription si votre API renvoie le type de résultats de restaurant



0
votes

Dans la fonction Carte, vous ne renvoyez aucune valeur et essayez de transformer dans l'objet les paramètres qui envoient dans la demande postale; xxx


1 commentaires

Merci beaucoup, ça marche! Cependant, la connexion peut passer même avec un courrier électronique et un mot de passe incorrect, il ne montre rien en vue à cause d'un objet vide, mais peut toujours passer à la page principale. Une idée pourquoi?



0
votes

postdata doit être l'objet au lieu de la chaîne. Vérifiez également par console.log dans isloggedin () méthode, quelles données localstorage.getem ('actuelRestaurant') retourne, s'il a une valeur Comme "{}" ou "null" il retournera tristes en si instruction. xxx


0 commentaires