@wjvcot

Как отображать данные текущего пользователя?

Я хочу отображать данные авторизованного пользователя. Но вместо этого у меня отображаются данные совсем другого пользователя, а не того который вошел в систему. Что нужно исправить, чтобы отобразить данные авторизованного (текущего) пользователя?

auth.service:

import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs";
import { tap } from "rxjs/operators";

export class User {
    id?: string;
    username?: string;
    roles?: string;
    name?: string;
    password?: string;
    createdAt?: string;
    photoSrc?: string;
}

@Injectable({
    providedIn: 'root'
})

export class AuthService {

    currentUser: User = new User();
    private token = null;

    constructor(
        private http: HttpClient
    ) {}

    login(user: User): Observable<{token: string}> {  
        return this.http.post<{token: string}>('/api/auth/login', user)
            .pipe(
                tap(
                    ({token}) => {
                        localStorage.setItem('auth-token', token)   
                        this.setToken(token)   
                        this.setCurrentUser()                  
                    }
                )
            )
    }

    setCurrentUser():User {
        return this.currentUser;
    }

    setToken(token: string) {
        this.token = token
    }

    getToken(): string {
        return this.token
    }

    isAuthenticated(): boolean {
        return !!this.token
    }

    logout() {
        this.setToken(null) 
        localStorage.clear()
        
    }
    
}


profile.component:

import { Component, OnInit } from '@angular/core';
import { AuthService, User } from '../../services/auth.service';
import { Router } from '@angular/router';
import { UserService } from '../../services/user.service';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-profile',
  templateUrl: './profile.component.html',
  styleUrls: ['./profile.component.css']
})
export class ProfileComponent implements OnInit  {

  user: User;

  constructor(
    private auth: AuthService, 
    private router: Router,
    private userService: UserService
  ) {}

  ngOnInit() {
    this.getUser();
  }

  getUser() {
    this.userService.getById(this.auth.currentUser).subscribe(
      data => this.user = data
    );
  }

}


user.service:

...
    getById(user: User): Observable<User> {
        return this.http.get<User>(`/api/user/${user.id}`)
    }
...
  • Вопрос задан
  • 391 просмотр
Пригласить эксперта
Ответы на вопрос 1
@mrAlexRabota
Frontend developer
setCurrentUser не устанавливает user'a а просто возвращает текущего, не понятно где вы его устанавливаете), нуи потом пытаетесь сделать
getById и получаете не то)
Для полного и точного ответа конечно лучше заглянуть в код)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы