繁体   English   中英

如何在 angular 中获取登录用户的 ID(MONGODB,后端的 NODEJS)

[英]How to get logged user's Id in angular (MONGODB, NODEJS for backend)

我想获取登录用户的 ID,以便当用户登录并单击“我的个人资料”时,他们会被定向到 url/profile/“theirId”。 先感谢您。 这是我的 authentication.service

export interface UserDetails{
  username: string
  email: string
  password: string
  firstName: string
  lastName: string
  exp: number
  iat: number
}
interface TokenResponse{
  token: string
}
export interface TokenPayload{
  username: string
  email: string
  password: string
  firstName: string
  lastName: string
}
@Injectable({
  providedIn: 'root'
})
export class AuthenticationService {
  private token: string

  constructor(private http: HttpClient, private router: Router) {}

  private saveToken(token: string): void{
    localStorage.setItem('usertoken', token)
    this.token = token
  }
  private getToken(): string{
    if(!this.token){
      this.token = localStorage.getItem('usertoken')
    }
    return this.token
  }
  public getUserDetails(): UserDetails{
    const token = this.getToken()
    let payload
    if(token){
      payload = token.split('.')[1]
      payload = window.atob(payload)
      return JSON.parse(payload)
    }else{
      return null
    }
  }
  public isLoggedIn(): boolean{
    const user = this.getUserDetails()
    if(user){
      return user.exp > Date.now()/ 1000
    }
    else{
      return false
    }
  }
  public login(user: TokenPayload): Observable<any>{
    const base = this.http.post('/user/login', user)
    const request = base.pipe(
      map((data: TokenResponse) => {
        if(data.token){
          this.saveToken(data.token)
        }return data
      })
    )
    return request
  }
  public register(user: TokenPayload) : Observable<any>{
    const base = this.http.post('/user/register', user)
    const request = base.pipe(
      map((data: TokenResponse) => {
        if(data.token){
          this.saveToken(data.token)
        }
        return data
      })
    )
    return request
  }
  public profile(id): Observable<any>{
    return this.http.get(`/user/profile/${id}`,
    {
      headers: {Authorization: `${this.getToken()}`}
    })
  }
  public logout(): void{
    this.token = ''
    window.localStorage.removeItem('usertoken')
    this.router.navigateByUrl('/')
  }

}

这是我的 header.component.ts (因为“我的个人资料”在这个组件内)。 我不确定在 myProfile 方法中放入什么来获取登录用户的 ID

export class HeaderComponent implements OnInit {
  details: UserDetails


  constructor(public auth: AuthenticationService,
    private route: ActivatedRoute) { }

  ngOnInit() {
  }
  navSlide(){
    const nav = document.querySelector('.navbar-menu');
    nav.classList.toggle('navbar-active')
  } 
  myProfile(){
    **//NOT SURE WHAT TO PUT HERE**
  }
}

在xxx.service.ts(可注入服务)中设置public user id variable 点击“我的配置文件”,在header.component.ts中导入xxx.service.ts,myProfile function可以得到user id变量

如何在不同的组件中获取公共变量:

用户服务.ts

import { Injectable } from '@angular/core';

@Injectable()

export class UserService{
    userId:string;
}

我的配置文件组件

import { UserService } from 'xx/xx/userService.ts';

constructor(            
    public userService: UserService,           
) {}

clickMyProfile(id){
    // do something else
    this.userService.userId=id;
}

标头组件

import { UserService } from 'xx/xx/userService.ts';

constructor(            
    public userService: UserService,           
) {}

myProfile(){
    const id = this.userService.userId;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM