[英]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.