You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将后端的Token与用户信息传递至前端?附代码示例

实现从后端获取Token与用户信息并传递至前端的方案

当前代码情况

user.service.ts

export class UserService {

  BASE_URL = "http://localhost:8082";
  constructor(private httpClient:HttpClient) {}

  public login(loginData:any){
    return this.httpClient.post(this.BASE_URL+"/authenticate",loginData);
  
  } 
}

login.component.ts

export class LoginComponent implements OnInit {

  constructor(private userService:UserService){}

  ngOnInit(): void {}

  login(loginFormData:NgForm){
    this.userService.login(loginFormData.value).subscribe(
      (response) =>{
        console.log(response);
      },
      (error=>{
        console.log(error);
      })
    );
  }

}

具体实现步骤

1. 定义响应数据接口

先创建一个接口规范后端返回的结构,避免使用any类型带来的不确定性:

// auth-response.interface.ts
export interface AuthResponse {
  token: string;
  user: {
    id: number;
    username: string;
    email: string;
    // 按需补充后端实际返回的其他用户字段
  };
}

2. 修正UserService的返回类型

在UserService中指定请求返回类型为上述接口,让类型约束更明确:

export class UserService {

  BASE_URL = "http://localhost:8082";
  constructor(private httpClient:HttpClient) {}

  public login(loginData:any): Observable<AuthResponse> {
    return this.httpClient.post<AuthResponse>(`${this.BASE_URL}/authenticate`, loginData);
  } 
}

3. 存储Token与用户信息

登录成功后,将Token和用户信息存入localStorage,方便全局组件调用:

export class LoginComponent implements OnInit {

  constructor(private userService:UserService){}

  ngOnInit(): void {}

  login(loginFormData:NgForm){
    this.userService.login(loginFormData.value).subscribe(
      (response) =>{
        // 存储认证Token
        localStorage.setItem('authToken', response.token);
        // 存储用户信息(转成JSON字符串)
        localStorage.setItem('currentUser', JSON.stringify(response.user));
        
        // 登录成功后可跳转到目标页面,例如首页
        // this.router.navigate(['/home']);
      },
      (error=>{
        console.error('登录失败:', error);
      })
    );
  }

}

4. 全局获取与管理用户信息

在UserService中添加工具方法,方便其他组件快速获取Token和用户信息,同时支持登出清除数据:

export class UserService {

  BASE_URL = "http://localhost:8082";
  constructor(private httpClient:HttpClient) {}

  public login(loginData:any): Observable<AuthResponse> {
    return this.httpClient.post<AuthResponse>(`${this.BASE_URL}/authenticate`, loginData);
  } 

  // 获取当前用户信息
  getCurrentUser() {
    const userStr = localStorage.getItem('currentUser');
    return userStr ? JSON.parse(userStr) : null;
  }

  // 获取认证Token
  getAuthToken() {
    return localStorage.getItem('authToken');
  }

  // 登出时清除存储的认证数据
  logout() {
    localStorage.removeItem('authToken');
    localStorage.removeItem('currentUser');
  }
}

5. 携带Token发起权限请求

后续需要权限验证的接口,在请求头中携带Token即可完成身份校验:

// 示例:获取用户个人详情接口
getUserProfile(): Observable<any> {
  const token = this.getAuthToken();
  const headers = new HttpHeaders().set('Authorization', `Bearer ${token}`);
  return this.httpClient.get(`${this.BASE_URL}/user/profile`, { headers });
}

内容的提问来源于stack exchange,提问作者Chathuranga Bandara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:12:44